Pagini recente » Cod sursa (job #546865) | Cod sursa (job #2359574) | Cod sursa (job #3001463) | Cod sursa (job #953786) | Cod sursa (job #67539)
Cod sursa(job #67539)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define MAXN 30005
int M, N, X, Y;
int d[MAXN];
vector< pair<int, int> > con[MAXN];
queue<int> Q;
char used[MAXN];
int main()
{
freopen("sate.in", "rt", stdin);
freopen("sate.out", "wt", stdout);
scanf("%d %d %d %d", &M, &N, &X, &Y);
for (int i = 0; i < N; i++)
{
int x, y, c;
scanf("%d %d %d", &x, &y, &c);
con[x].push_back( make_pair(y, c) );
con[y].push_back( make_pair(x, -c) );
}
memset(d, 0x3f, sizeof(d));
d[1] = 0;
for (Q.push(1), used[1] = 1; !Q.empty(); Q.pop())
{
int i = Q.front();
vector< pair<int, int> > :: iterator it;
for (it = con[i].begin(); it != con[i].end(); it++)
{
int _i = (*it).first, _c = d[i] + (*it).second;
if (_c < d[_i])
{
d[_i] = _c;
if (!used[_i])
Q.push(_i);
}
}
used[i] = 0;
}
if (Y > X)
printf("%d\n", d[Y] - d[X]);
else
printf("%d\n", d[X] - d[Y]);
return 0;
}