Cod sursa(job #628831)

Utilizator stay_awake77Cangea Catalina stay_awake77 Data 2 noiembrie 2011 10:57:29
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#include <cstring>

#define NMAX 30005
#define pb push_back
#define mp make_pair
#define PII pair< int, int >
#define nod first
#define cost second

using namespace std;

ifstream in("sate.in");
ofstream out("sate.out");

int N, M, i, x, y, c, S, D, Dist[NMAX];
vector< PII > G[NMAX];
queue< int > Q;
bool USED[NMAX];

inline void BFS()
{
	Q.push( S );
	
	while( true )
	{
		int Nod = Q.front();
		Q.pop();
		
		for( vector< PII >::iterator it = G[Nod].begin(); it != G[Nod].end(); ++it )
			if( !USED[ (*it).nod ] )
			{
				USED[ (*it).nod ] = true;
				Dist[ (*it).nod ] = Dist[ Nod ] + (*it).cost;
				
				if( (*it).nod == D ) return;
				Q.push( (*it).nod );
			}
	}
}

int main()
{
	in >> N >> M >> S >> D;
	for( i = 0; i < M; ++i )
	{
		in >> x >> y >> c;
		if( x > y ) swap( x, y );
		
		G[x].pb( mp( y, c ) );
		G[y].pb( mp( x, -c ) );
	}
	
	memset( USED, false, sizeof(USED) );
	memset( Dist, 0, sizeof(Dist) );
	BFS();
	
	out << Dist[ D ] << '\n';
	
	return 0;
}