Cod sursa(job #1052719)

Utilizator UnforgivenMihai Catalin Botezatu Unforgiven Data 11 decembrie 2013 19:00:03
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <queue>

const static int NMAX = 30002;

using namespace std;

ifstream input("sate.in");
ofstream output("sate.out");
int X , Y , N , M;
vector<int> graph[NMAX];
vector<int> cost[NMAX];
bool sel[NMAX];
long long dist[NMAX];
queue<int> coada;

int main()
{
	input >> N >> M >> X >> Y;
	register int x , y , nod , vecin , i;
	int c;
	for (int i = 0; i < M ; i++)
	{
		input >> x >> y >> c;
		graph[x].push_back(y);
		graph[y].push_back(x);
		cost[x].push_back(c);
		cost[y].push_back(c);
	}
	coada.push(X);
	sel[X] = true;
	while (!coada.empty())
	{
		nod = coada.front();
		coada.pop();
		for (i = 0 ; i< graph[nod].size();i++)
		{
			vecin = graph[nod][i];
			if (!sel[vecin])
			{
				sel[vecin] = true;
				if (vecin < nod)
				{
					dist[vecin] = dist[nod] - cost[nod][i];
				}
				else
				{
					dist[vecin] = dist[nod] + cost[nod][i];
				}
				coada.push(vecin);
			}
		}
	}
	output << dist[Y];
	input.close();
	output.close();
    return 0;
}