Pagini recente » Cod sursa (job #2620598) | Cod sursa (job #1153801) | Cod sursa (job #33578) | Cod sursa (job #2510497) | Cod sursa (job #920657)
Cod sursa(job #920657)
#include <cstdio>
#include <vector>
#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,next,dist;
vector<pair<int, int> > A[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 = 0; i < A[start].size(); i++)
{
next = A[start][i].first;
dist = A[start][i].second;
if(Dm[next] > Dm[start] + dist)
{
Dm[next] = Dm[start] + dist;
u++;
Q[u] = next;
}
}
}
}
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].push_back(make_pair(b,d));
A[b].push_back(make_pair(a,-d));
}
bfs(x);
printf("%d\n", Dm[y]);
return 0;
}