Cod sursa(job #400901)

Utilizator dexter_dexMutascu Adrian - Dragos dexter_dex Data 22 februarie 2010 09:57:09
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
#include <vector>

#define Nmax 30010

using namespace std;

vector < pair <int, int> > A[Nmax];

int x, y, i, j, p, u, a, b, c, sol, n, m, sgn, ok, l, fiu;
int D[Nmax], coada[Nmax];
char viz[Nmax];

void BFS (int nod){
	
	p = 1;
	u = 2;
	coada[ p ] = nod;
	viz[nod] = 1;
	
	while (p <= u){
		nod = coada[p];		

		if (ok == 100)
			break;

		l = A[nod].size();

		for (i = 0 ; i < l ; i++) {
			fiu = A[nod][i].first;
			if (viz[fiu] == 0){
				viz[fiu] = 1;
				sgn = 1;
				coada[u] = fiu;
			
				if (coada[ p ] > fiu)
					sgn = -1;
				
				D[u] = D[p] + A[nod][i].second * sgn;
			
			
				if (fiu == y){
					sol = D[u];
					ok = 100;
					break;
				}
			
				u++;
			}

		}
		p++;
	}
	
	
}

int main (){
	
	FILE * f = fopen ("sate.in", "r");
	FILE * g = fopen ("sate.out", "w");
	
	fscanf (f, "%d %d %d %d", &n, &m, &x, &y);
	
	for (i = 1 ; i <= m ; i++){
		fscanf (f, "%d %d %d", &a, &b, &c);
		
		A[a].push_back( make_pair(b, c) ); 
		A[b].push_back( make_pair(a, c) );
	
		
	}
	
	BFS (x);
	
	fprintf (g, "%d", sol);
	
	fclose(g);
	fclose(f);
	return 0;
}