Cod sursa(job #504782)

Utilizator pykhNeagoe Alexandru pykh Data 28 noiembrie 2010 18:05:48
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<vector>
#include<cstdio>
#include <algorithm>
using namespace std;

const int N = 30001;
const char in[]="sate.in";
const char out[]="sate.out";

vector< pair<int, int> >G[N];

long n, m, d[N], X, Y, coada[N];

void bfs(int x)
	{
		for(unsigned long i = 0 ; i < G[x].size() ; ++i)
			if(!d[G[x][i].first])
			{
				coada[++coada[0]] = G[x][i].first;
				if(G[x][i].first < x)
				d[G[x][i].first] = d[x] - G[x][i].second;
				else d[G[x][i].first] = d[x] + G[x][i].second;
			}
}


int main()
	{
		freopen(in,"r",stdin);
		freopen(out,"w",stdout);
		scanf("%d%d%d%d", &n, &m, &X, &Y);
		for(long i = 1 ; i <= m ; ++i)
		{
			int x, y, dist;
			scanf("%d%d%d", &x, &y, &dist);
			G[x].push_back(make_pair(y, dist));
			G[y].push_back(make_pair(x, dist));
		}
		coada[++coada[0]] = X;
		for( long i = 1 ; i <= coada[0] && !d[Y]; ++i)
			bfs(coada[i]);
		printf("%d\n",d[Y]);
return 0;
}