Cod sursa(job #523249)

Utilizator rares192Preda Rares Mihai rares192 Data 17 ianuarie 2011 16:08:08
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream>
#include<queue>
#include<bitset>
#include<algorithm>
using namespace std;

void read();
void BF();
void write();

bitset<35000> s;
queue<int > Q;
vector< vector<pair<int, int> > > a;
int n, m, x, y;
int d[35000];

int main()
{
	read();
	BF();
	write();
	return 0;
}

void read()
{
	ifstream fin("sate.in");
	fin >> n >> m >> x >> y;
	a.resize(n+1);
	
	if( x > y) 
		swap(x, y);
	
	int a1, b, c;
	for(int i = 1; i <= m; i++)
	{
		fin >> a1 >> b >> c;
		a[a1].push_back( make_pair(b, c) );
		a[b].push_back( make_pair(a1, -c) );
	}
	fin.close();
}

void BF()
{
	s[x] = 1;
	Q.push(x);
	d[x] = 0;
	
	while( !Q.empty() )
	{
		int k = Q.front();
		Q.pop();
		
		for(int i = 0; i < (int)a[k].size(); ++i)
		{
			int j = a[k][i].first;
			if( !s[j] )
			{
				Q.push(j);
				d[j] = a[k][i].second + d[k];
				s[j] = 1;
			}
		}
	}
}


void write()
{
	ofstream fout("sate.out");
	
	fout << d[y] ;
	fout.close();
}