Pagini recente » Cod sursa (job #1764302) | Cod sursa (job #1041591) | Cod sursa (job #2836032) | Cod sursa (job #1014162) | Cod sursa (job #951879)
Cod sursa(job #951879)
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#define maxn 30010
using namespace std;
queue < pair < int, int > > q;
vector < pair < int, int > > G[maxn];
int sel[maxn],n,m,S1,S2,x,y,c,i,sum,ok=1;
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&S1,&S2);
while(m--)
{
scanf("%d%d%d",&x,&y,&c);
G[x].push_back(make_pair(y,c));
G[y].push_back(make_pair(x,c));
}
q.push(make_pair(S1,0));
while(!q.empty()&&ok)
{
x=q.front().first;
sum=q.front().second;
sel[x]=1;
if(x==S2) break;
for(i=0; i<G[x].size(); ++i)
if(!sel[G[x][i].first])
{
if(G[x][i].first<x)
{
if(G[x][i].first==S2)
{
sum-=G[x][i].second; ok=0;
break;
}
q.push(make_pair(G[x][i].first, sum-G[x][i].second));
}
else
{
if(G[x][i].first==S2)
{
sum+=G[x][i].second; ok=0;
break;
}
q.push(make_pair(G[x][i].first, sum+G[x][i].second));
}
}
q.pop();
}
if(sum<0) sum=-sum;
printf("%d\n",sum);
return 0;
}