Cod sursa(job #1321501)

Utilizator BLz0rDospra Cristian BLz0r Data 19 ianuarie 2015 10:59:18
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <vector>
#include <utility>
#include <queue>
using namespace std;

#define pb push_back
#define mp make_pair
#define Nmax 30001

FILE *f=fopen ("sate.in","r");
FILE *g=fopen ("sate.out","w");

queue < int > Q;
vector < pair <int,int> > G[Nmax];

int N, M;
int cost[Nmax];

void BFS (int start, int finish){
	int aux;
	vector < pair <int,int> > :: iterator it;
	
	if (start == finish) return;
	
	Q.push(start);
	cost[start] = 1;
	
	while ( !Q.empty() ){
		aux = Q.front();
		Q.pop();
		
		for (it = G[aux].begin(); it < G[aux].end(); ++it){
			if (cost[it -> first] == 0){
				cost[it -> first] = cost[aux] + it -> second;
				
				if (it -> first == finish)
					return;
				
				Q.push (it -> first);
			}
		}
	}
}

int main(){
	int start, finish, x, y, c;
	
	fscanf (f,"%d%d%d%d",&N,&M,&start,&finish);
	
	for (int i = 1; i <= M ; ++i){
		fscanf (f,"%d%d%d",&x,&y,&c);
		G[x].pb ( mp (y, c) );
		G[y].pb ( mp (x,-c) );
	}
	
	BFS (start, finish);
	
	fprintf (g,"%d",cost[finish]-1);
	
	return 0;
}