Pagini recente » Cod sursa (job #254236) | Cod sursa (job #2718387) | Cod sursa (job #3152577) | Cod sursa (job #2787704) | Cod sursa (job #920650)
Cod sursa(job #920650)
#include <cstdio>
#define FILEIN "sate.in"
#define FILEOUT "sate.out"
#define NMAX 30001
#define INF 0x3f3f3f3f
using namespace std;
int n, m, i, j, x, y, d, a, b, p, u, start;
int A[NMAX][NMAX];
int Dm[NMAX];
int Q[NMAX];
void bfs ( int node )
{
Dm[node] = 0;
p = u = 1;
Q[p] = node;
while ( p <= u)
{
start = Q[p++];
for ( i = 1; i <= n; i++)
{
if(Dm[i] > Dm[start] + A[start][i])
{
Dm[i] = Dm[start] + A[start][i];
u++;
Q[u] = i;
}
}
}
}
int main()
{
freopen(FILEIN,"r",stdin);
freopen(FILEOUT,"w",stdout);
scanf("%d %d %d %d", &n, &m, &x, &y);
for ( i = 1; i <= n; i++)
Dm[i] = INF;
for ( i = 1; i <= m; i++)
{
scanf("%d %d %d", &a, &b, &d);
A[a][b] = d;
A[b][a] = -d;
}
for ( i = 1; i <= n; i++)
for ( j = 1; j <= n; j++)
if(A[i][j] == 0 && i != j)
A[i][j] = INF;
bfs(x);
printf("%d\n", Dm[y]);
return 0;
}