Pagini recente » Cod sursa (job #1334043) | Cod sursa (job #1352553) | Cod sursa (job #1191514) | Cod sursa (job #6918) | Cod sursa (job #1201025)
#include <cstdio>
#include <vector>
#include <bitset>
#include <cstring>
#include <queue>
#define Nmax 30005
#define INF 0x3f3f3f3f
using namespace std;
int N,M,X,Y;
vector<pair<int,int> > G[Nmax];
queue<int> Q;
bitset<Nmax> used;
int DP[Nmax];
void read()
{
scanf("%d%d%d%d",&N,&M,&X,&Y);
int a,b,c;
for(int i = 1; i <= M; ++i)
{
scanf("%d%d%d",&a,&b,&c);
G[a].push_back(make_pair(c,b));
G[b].push_back(make_pair(c,a));
}
}
void solve()
{
///memset(DP,INF,sizeof(DP));
DP[X] = 0;
used[X] = 1;
Q.push(X);
int k;
while(!Q.empty())
{
k = Q.front(); Q.pop();
used[k] = 1;
for(vector<pair<int,int> >::iterator it = G[k].begin(); it != G[k].end(); ++it)
if(!used[it->second])
{
if(it->second > k)
DP[it->second] = DP[k] + it->first;
else
DP[it->second] = DP[k] - it->first;
Q.push(it->second);
if(DP[Y])
{
printf("%d\n",DP[Y]);
return;
}
}
}
printf("%d\n",DP[Y]);
}
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
read();
solve();
return 0;
}