Cod sursa(job #562570)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 23 martie 2011 14:09:02
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#include <list>
using namespace std;

const int DIM = 100005;
int N, M, X, Y, C[DIM], D[DIM], viz[DIM];

struct stip {int v, d;} s1, s2;
list <stip> L[DIM];
list <stip> :: iterator it;

int main ()
{
	freopen ("sate.in", "r", stdin);
	freopen ("sate.out", "w", stdout);
	
	scanf ("%d%d%d%d", &N, &M, &X, &Y);
	for (int i = 0; i < M; i++)
	{
		scanf ("%d%d%d", &s1.v, &s2.v, &s1.d);
		s2.d = s1.d;
		if (s1.v > s2.v)
			s2.d = -s2.d;
		else
			s1.d = -s1.d;
		L[s1.v].push_back (s2);
		L[s2.v].push_back (s1);
	}
	
	int p = 0, u = 0;
	C[0] = X;
	D[0] = 0;
	viz[X] = 1;
	while (p <= u)
	{
		for (it = L[C[p]].begin(); it != L[C[p]].end(); it++)
			if (!viz[it->v])
			{
				u++;
				C[u] = it->v;
				D[it->v] = D[C[p]] + it->d;
				viz[it->v] = 1;
				if (it->v == Y)
				{
					p = u + 1;
					break;
				}
			}		
		p++;
	}
	
	printf ("%d", D[Y]);
	return 0;
}