Cod sursa(job #1219632)

Utilizator pulseOvidiu Giorgi pulse Data 14 august 2014 18:15:33
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

const int MAXN = 30005;
int N, M, X, Y, D[MAXN];
bool Used[MAXN];
queue <int> Q;
vector < pair <int, int> > G[MAXN];

void BFS()
{
	Q.push(X);
	Used[X] = 1;
	while (!Q.empty())
	{
		int node = Q.front(); Q.pop();
		if (node == Y)
		{
			printf("%d\n", D[Y]);
			return;
		}
		for (vector < pair<int, int> > :: iterator it = G[node].begin(); it != G[node].end(); ++it)
		{
			if (!Used[it -> first])
			{
				Q.push(it -> first);
				Used[it -> first] = 1;
				D[it -> first] = D[node] + it -> second;
			}
		}
	}
}

int main()
{
	freopen("sate.in", "r", stdin);
	freopen("sate.out", "w", stdout);
	scanf("%d %d %d %d\n", &N, &M, &X, &Y);
	for (; M; --M)
	{
		int a, b, c;
		scanf("%d %d %d\n", &a, &b, &c);
		G[a].push_back(make_pair(b, c));
		G[b].push_back(make_pair(a, -c));
	}
	BFS();
	return 0;
}