Pagini recente » Cod sursa (job #1171366) | Cod sursa (job #1095989) | Cod sursa (job #2201766) | Cod sursa (job #1006776) | Cod sursa (job #1725869)
#include<cstdio>
#include<vector>
#include<queue>
#define NMax 30001
#define INF 1000000000
using namespace std;
FILE *fin = freopen("sate.in", "r", stdin);
FILE * fout = freopen("sate.out", "w", stdout);
int N, M, S, F;
int dist[NMax];
vector < pair < int, int > > v[NMax];
queue < pair < int, int > > q;
int main()
{
scanf("%d%d%d%d", &N, &M, &S, &F);
for (int i = 1, X, Y, D; i <= M; i++)
{
scanf("%d%d%d", &X, &Y, &D);
v[X].push_back(make_pair(Y, D));
v[Y].push_back(make_pair(X, -D));
}
for (int i = 1; i <= N; i++)
dist[i] = INF;
q.push(make_pair(S, 0));
dist[S] = 0;
vector < pair < int, int > > :: iterator it;
while (!q.empty())
{
int node = q.front().first;
q.pop();
for (it = v[node].begin(); it != v[node].end(); it++)
{
if (dist[it -> first] > dist[node] + it -> second)
{
dist[it -> first] = dist[node] + it -> second;
q.push(make_pair(it -> first, dist[it -> first]));
}
}
}
//for (int i = 1; i <= N; i++)
printf("%d\n", dist[F]);
}