Pagini recente » Cod sursa (job #2856929) | Cod sursa (job #2309745) | Cod sursa (job #578086) | Cod sursa (job #179881) | Cod sursa (job #1028856)
#include <cstdio>
#include <cassert>
#include <algorithm>
#include <vector>
#include <queue>
#define Nmax 30005
#define InFile "sate.in"
#define OutFile "sate.out"
#define pb push_back
using namespace std;
int n, m, X, Y, viz[Nmax], d[Nmax];
vector <int> C[Nmax], A[Nmax];
void read();
void BFS(int);
void write();
int main ()
{
assert (freopen (InFile, "r", stdin));
assert (freopen (OutFile, "w", stdout));
read();
BFS (X);
write();
return 0;
}
void read()
{
int i, x, y, c;
scanf ("%d %d %d %d\n", &n, &m, &X, &Y);
for (i=1; i<=m; i++)
{
scanf ("%d %d %d\n", &x, &y, &c);
A[x].pb(y); C[x].pb(c);
A[y].pb(x); C[y].pb(-c);
}
}
void BFS (int nd)
{
int i, x, y, c, lg;
queue <int> Q;
viz[nd]=1;
d[nd]=0;
Q.push(nd);
while (!Q.empty())
{
x=Q.front(); Q.pop();
lg=A[x].size();
for (i=0; i<lg; i++)
{
y=A[x][i]; c=C[x][i];
if (!viz[y])
{
viz[y]=1;
d[y]=d[x]+c;
Q.push (y);
if (y==Y)
return;
}
}
}
}
void write()
{
printf ("%d\n", d[Y]);
}