Cod sursa(job #520554)

Utilizator dacyanMujdar Dacian dacyan Data 9 ianuarie 2011 14:52:52
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <queue>
#include <vector>
using namespace std;

typedef vector<long> VI;

long long n, m, x, y;
vector<pair<long,long> > G[30001];
VI d;
vector<bool> s;

void Read();
void Write();
void BF();

int main()
{
	Read();
	BF();
	Write();
	return 0;
}

void Read()
{
	ifstream fin("sate.in");
	fin >> n >> m >> x >> y;
	d.resize(n+1); s.resize(n+1);
	int a, b, c;
	while (fin >> a >> b >> c)
	{
		G[a].push_back(make_pair(b,c));
		G[b].push_back(make_pair(a,c));
	}
	fin.close();
}

void BF()
{
	int i, j, k;
	queue<int> Q;
	Q.push(x);
	d[x] = 0;
	s[x] = true;
	while(!Q.empty() && !s[y])
	{
		k = Q.front();
		Q.pop();
		for (i = 0; i < G[k].size(); ++i)
		{
			int son = G[k][i].first;
			if (s[son]) continue;
			s[son] = true;
			if (k < son)
				d[son] = d[k] + G[k][i].second;
			else
				d[son] = d[k] - G[k][i].second;
			Q.push(son);
		}
	}
}

void Write()
{
	ofstream fout("sate.out");
	fout << d[y] << '\n';
	fout.close();
}