Cod sursa(job #1517079)

Utilizator valentin50517Vozian Valentin valentin50517 Data 3 noiembrie 2015 20:44:44
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <algorithm>

using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");

typedef struct nod{
	int k,d;
	nod* next;
} *lnod;

lnod A[30010];
int C[200000],cod,drum[30010], N, M, X, Y;
bool B[30010],found;

void add(lnod &a,int key, int d){
	lnod b = new nod;
	b->k = key;
	b->d = d;
	b->next = a;
	a = b;
}

void bfs(int i){
	B[i] = 1;
	for(lnod l = A[i];l && !found;l = l->next){
		if(!B[l->k]) {
			C[++cod] = l->k;
			if(l->k > i)
				drum[l->k] = drum[i] + l->d;
			else	
				drum[l->k] = drum[i] + l->d * -1;
			if(l->k == Y) found = true; 
		}
	}
}

int main(){
	fin >> N >> M >> X >> Y;
	if(X == Y){
		fout << 0;
		return 0;
	}
	
	if(X > Y) swap(X,Y);
	
	int x,y,d;
	
	for(int i = 0;i<M;i++){
		fin >> x >> y >> d;
		add(A[x],y,d);
		add(A[y],x,d);
	}
	
	C[++cod] = X;
 	
	 do{
		bfs(C[cod--]);
	}while(cod > 0 && !found);
	
	if(found) fout << drum[Y];
	
	return 0;
}