Pagini recente » Cod sursa (job #2129226) | Cod sursa (job #1447254) | Cod sursa (job #1256075) | Cod sursa (job #1010413) | Cod sursa (job #68409)
Cod sursa(job #68409)
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
#define MAX_N 30005
#define MAX_M 200050
#define FIN "sate.in"
#define FOUT "sate.out"
#define pb push_back
#define mp make_pair
#define f first
#define s second
int N, M, X, Y, D[MAX_N], Q[MAX_M], inq[MAX_N];
vector< pair<short, int> > G[MAX_N];
char buf[64], *p;
inline int get(void)
{
int n = 0;
for (; *p >= '0' && *p <= '9'; p++)
n = n*10 + *p-'0';
for (; *p == ' '; p++);
return n;
}
int main(void)
{
int i, a, b, c, n, ql, qr;
vector< pair<short, int> >::iterator it;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d %d %d %d\n", &N, &M, &X, &Y);
for (i = 0; i < M; i++)
{
fgets(buf, sizeof(buf), stdin);
p = buf; a = get(); b = get(); c = get();
G[a].pb(mp(b, c));
G[b].pb(mp(a, -c));
}
ql = 0, qr = -1;
for (i = 1; i <= N; i++) inq[Q[++qr] = i] = 1;
for (; ql <= qr; ql++)
{
for (it = G[n = Q[ql]].begin(); it != G[n].end(); it++)
if (D[it->f] > D[n]+it->s)
{
D[it->f] = D[n]+it->s;
if (!inq[it->f]) Q[++qr] = it->f;
}
inq[n] = 0;
}
printf("%d\n", D[Y]-D[X]);
return 0;
}