Pagini recente » Cod sursa (job #605063) | Cod sursa (job #903197) | Cod sursa (job #1992415) | Cod sursa (job #317183) | Cod sursa (job #68310)
Cod sursa(job #68310)
using namespace std;
#include <cstdio>
#include <cassert>
#include <vector>
#define FIN "sate.in"
#define FOUT "sate.out"
#define NMAX 1<<15
#define pb push_back
vector <int> A[NMAX], Dist[NMAX];
int N, M, X, Y, D[NMAX], ended, cd[NMAX<<1];
void read ()
{
scanf ("%d %d %d %d\n", &N, &M, &X, &Y);
int a, b, d;
for (int i = 1; i <= M; ++ i)
{
scanf ("%d %d %d\n", &a, &b, &d);
A[a].pb (b);
A[b].pb (a);
Dist[a].pb (d);
Dist[b].pb (d);
}
}
void bf ()
{
int v, sz, i;
cd[ended = 0] = X;
D[X] = 1;
for (int pas = 0; pas <= ended; ++ pas)
{
v = cd[pas];
sz = A[v].size ();
for (i = 0; i < sz; ++ i)
if (!D[A[v][i]])
{
if (A[v][i] < v)
D[A[v][i]] = D[v] - Dist[v][i];
else
D[A[v][i]] = D[v] + Dist[v][i];
fprintf (stderr, "%d %d\n", A[v][i], D[A[v][i]]);
cd[++ ended] = A[v][i];
if (A[v][i] == Y)
return;
}
}
}
void solve ()
{
bf ();
printf ("%d\n", D[Y] - 1);
}
int
main ()
{
freopen (FIN, "rt", stdin);
freopen (FOUT, "wt", stdout);
read ();
solve ();
return 0;
}