Cod sursa(job #1321495)

Utilizator BLz0rDospra Cristian BLz0r Data 19 ianuarie 2015 10:54:18
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 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");

struct muchie{
	int nod, cost;
};

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

int N, M;
bool inQ[Nmax];

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

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) );
	}
	
	fprintf (g,"%d",BFS (start, finish) );
	
	return 0;
}