Cod sursa(job #496890)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 31 octombrie 2010 00:38:16
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
#include<vector>
#include<deque>
#include<algorithm>
using namespace std;

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

int c,N,M,X,Y,x,p,viz[30005],aux;
struct s{
	int vecin;
	int dist;
} y;

vector<s>W[30005];
deque<int>coada;
deque<int>cost;

int main () {
	
	fscanf(f,"%d %d %d %d",&N,&M,&X,&Y);
	
	while( M-- ){
		fscanf(f,"%d %d %d",&x,&y.vecin,&y.dist);
		W[x].push_back(y);
		aux = y.vecin;
		y.vecin = x; y.dist = -y.dist;
		W[aux].push_back(y);
	}
	coada.push_back(X);
	cost.push_back(0);
	viz[X] = 1;
	vector<s>::iterator itt;
	
	while ( !coada.empty() ) {
		p = *coada.begin();
		c = *cost.begin();
		if( p == Y )
			break;
		for( itt = W[p].begin() ; itt != W[p].end(); ++itt ){
			if ( ! viz[ (*itt).vecin ] ){
				viz[(*itt).vecin] = 1;
				coada.push_back((*itt).vecin);
				cost.push_back(c + (*itt).dist);
			}				
		}		
		coada.pop_front();
		cost.pop_front();
	}
	
	fprintf( g,"%d\n",c );
	
	fclose(f);
	fclose(g);
	
	return 0;
	
}