Cod sursa(job #559620)

Utilizator Catah15Catalin Haidau Catah15 Data 17 martie 2011 22:28:04
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

#define maxN 30005
#define PB push_back
#define INF (1 << 30)


int N, M, X, Y;
int dist[maxN];
vector < pair <int, int> > lista[maxN];
queue < int > Q;


int main()
{
	ifstream f("sate.in");
	ofstream g("sate.out");
	
	f >> N >> M >> X >> Y;
	
	for (int i = 1; i <= M; ++ i)
	{
		int x, y, d;
		
		f >> x >> y >> d;
		
		lista[x].PB ( make_pair (y, d) );
		lista[y].PB ( make_pair (x, d) );
	}
	
	Q.push(X);

	dist[X] = 0;

	
	for ( ; ! Q.empty() ; )
	{
		int nod = Q.front();
		
		Q.pop();
		
		for (unsigned int i = 0; i < lista[nod].size(); ++ i)
		{
			int nod2 = lista[nod][i].first;
			
			if (dist[nod2] || nod2 == X)
				continue;
			
			if (nod2 > nod)
				dist[nod2] = dist[nod] + lista[nod][i].second;
			else
				dist[nod2] = dist[nod] - lista[nod][i].second;
			
			if (nod2 == Y)
			{
				g << dist[Y];
				return 0;
			}
			
			Q.push (nod2);
		}
	}
}