Cod sursa(job #771186)

Utilizator vlad.maneaVlad Manea vlad.manea Data 25 iulie 2012 01:29:08
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <queue>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <climits>

#define INFILE "sate.in"
#define OUTFILE "sate.out"
#define NMax 32768

using namespace std;

int N, X, Y;
vector<int> Links[NMax], Distances[NMax];

int bfs()
{
	int d, i, x, y;
	queue<int> Queue;
	vector<int> Visited(NMax, 0);
	vector<int> Distance(NMax, 0);
	
	Visited[X] = true;
	Queue.push(X);

	while (!Queue.empty())
	{
		d = Queue.front();
		
		for (i = 0; i < Links[d].size(); ++i)
		{
			x = Links[d][i];
			
			if (!Visited[x])
			{
				Distance[x] = Distance[d] + Distances[d][i];
				
				if (x == Y)
				{
					return Distance[x];
				}
				
				Visited[x] = true;
				Queue.push(x);
			}
		}

		Queue.pop();
	}
}

int main()
{
	int x, y, d, i, M;

	freopen(INFILE, "r", stdin);
	freopen(OUTFILE, "w", stdout);

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

	while (M--)
	{
		scanf("%d%d%d", &x, &y, &d);
		Links[x].push_back(y);
		Links[y].push_back(x);
		Distances[x].push_back(0 + d);
		Distances[y].push_back(0 - d);
	}

	printf("%d\n", bfs());

	return 0;
}