Cod sursa(job #400896)

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

#define Nmax 30010
#define Mmax 100040

using namespace std;

vector <int> A[Nmax], B[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];
			if (viz[fiu] == 0){
				viz[fiu] = 1;
				sgn = 1;
				coada[u] = fiu;
			
				if (coada[ p ] > fiu)
					sgn = -1;
				
				D[u] = D[p] + B[nod][i]*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(b); A[b].push_back(a);
		B[a].push_back(c); B[b].push_back(c);
		
	}
	
	BFS (x);
	
	fprintf (g, "%d", sol);
	
	fclose(g);
	fclose(f);
	return 0;
}