Cod sursa(job #67539)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 25 iunie 2007 11:19:53
Problema Sate Scor 35
Compilator cpp Status done
Runda preONI 2007, Runda Finala, Clasa a 9-a si gimnaziu Marime 0.92 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

#define MAXN 30005

int M, N, X, Y;
int d[MAXN];
vector< pair<int, int> > con[MAXN];
queue<int> Q;
char used[MAXN];

int main()
{
	freopen("sate.in", "rt", stdin);
	freopen("sate.out", "wt", stdout);

	scanf("%d %d %d %d", &M, &N, &X, &Y);

	for (int i = 0; i < N; i++)
	{
		int x, y, c;
		scanf("%d %d %d", &x, &y, &c);
		con[x].push_back( make_pair(y, c) );
		con[y].push_back( make_pair(x, -c) );
	}

	memset(d, 0x3f, sizeof(d));
	d[1] = 0;
	for (Q.push(1), used[1] = 1; !Q.empty(); Q.pop())
	{
		int i = Q.front();
		vector< pair<int, int> > :: iterator it;
		for (it = con[i].begin(); it != con[i].end(); it++)
		{
			int _i = (*it).first, _c = d[i] + (*it).second;

			if (_c < d[_i])
			{
				d[_i] = _c;
				if (!used[_i])
					Q.push(_i);
			}
		}
		used[i] = 0;
	}

	if (Y > X)
		printf("%d\n", d[Y] - d[X]);
	else
		printf("%d\n", d[X] - d[Y]);
	return 0;
}