Pagini recente » Cod sursa (job #2444156) | Cod sursa (job #354055) | Cod sursa (job #1581059) | Cod sursa (job #229420) | Cod sursa (job #68326)
Cod sursa(job #68326)
using namespace std;
#include <cstdio>
#include <cassert>
#include <vector>
#include <string.h>
#define FIN "sate.in"
#define FOUT "sate.out"
#define NMAX 1<<15
#define INF 0x3f3f3f3f
#define pb push_back
int N, M, X, Y, D[NMAX], ended, cd[NMAX<<1], a, b, d;
struct graf
{
int n, v;
graf *next;
} *A[NMAX];
void add (int x, int y, int z)
{
graf *p = new graf;
p -> n = y;
p -> v = z;
p -> next = A[x];
A[x] = p;
}
void read ()
{
scanf ("%d %d %d %d\n", &N, &M, &X, &Y);
for (int i = 1; i <= M; ++ i)
{
scanf ("%d %d %d\n", &a, &b, &d);
add (a, b, d);
add (b, a, d);
}
}
void bf ()
{
int v, sz, i;
cd[ended = 0] = X;
D[X] = 1;
for (int pas = 0; pas <= ended; ++ pas)
{
v = cd[pas];
if (v == Y)
return;
for (graf *p = A[v]; p; p = p -> next)
if (!D[p -> n])
{
if (p -> n < v)
D[p -> n] = D[v] - (p -> v);
else
D[p -> n] = D[v] + (p -> v);
//fprintf (stderr, "%d %d\n", A[v][i], D[A[v][i]]);
cd[++ ended] = p -> n;
}
}
}
void solve ()
{
bf ();
printf ("%d\n", D[Y] - 1);
}
int
main ()
{
freopen (FIN, "rt", stdin);
freopen (FOUT, "wt", stdout);
read ();
solve ();
return 0;
}