Pagini recente » Cod sursa (job #3263176) | Cod sursa (job #1257550) | Cod sursa (job #1849896) | Cod sursa (job #365521) | Cod sursa (job #407953)
Cod sursa(job #407953)
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
#define dim 30030
#define inf 0x3f3f3f3f
#define fs first
#define sc second
#define mp make_pair
#define pb push_back
queue <int>q;
vector <pair < int,int > > v[dim];
int n,m,sf,in;
int dst[dim];
void add(int &x,int &y,int c)
{
v[x].pb( mp(y,c));
}
void read()
{
int x,y,c;
scanf("%d%d%d%d",&n,&m,&in,&sf);
for(int i=1 ;i<=m; i++)
{
scanf("%d%d%d",&x,&y,&c);
add(x,y,c);
add(y,x,-c);
}
}
void bf ()
{
int nod;
memset(dst , inf , sizeof(dst));
dst[in]=0;
for(q.push(in) ; !q.empty(); q.pop())
{
nod = q.front();
//printf("%d ", nod);
for(int i=0 ;i< v[nod].size(); i++)
{
if( v[nod][i].fs == sf)
{
printf("%d",dst[nod]+v[nod][i].sc);
return ;
}
if( dst [v[nod][i].fs] > dst [ nod ]+ v[nod][i].sc )
{
dst [v[nod][i].fs] = dst [ nod ]+ v[nod][i].sc ;
q.push(v[nod][i].fs);
}
}
}
}
int main ()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
read();
bf();
return 0;
}