Cod sursa(job #530457)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 7 februarie 2011 20:23:01
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream in("sate.in");
ofstream out("sate.out");

struct nod{
	int v,cost;
};

vector <nod> a[1<<16];

int n,m,X,Y,p=0,u=0;
int INF=1<<30;
int coada[1<<16];
int costf[1<<16];

void citire(){
	int k,l,c;
	nod aux;
    while(m--){
        in>>k;
		in>>l;
		in>>c;
		aux.v=l;
		if(k>l){
			aux.cost=(-1)*c;
		}
		else{
			aux.cost=c;
		}
        a[k].push_back(aux);
		aux.v=k;
		aux.cost=-aux.cost;
		a[l].push_back(aux);		
    }
}

void BF(){
	int x,i,y,c;
	u++;
	coada[u]=X;
	p++;
	while(p<=u){
		x=coada[p++];
		for(i=0;i<a[x].size();i++){
			y=a[x][i].v;
			c=a[x][i].cost;
			if(costf[x]+c>=costf[y])
				continue;
			u++;
			coada[u]=a[x][i].v;
			costf[a[x][i].v] = costf[x]+a[x][i].cost;
		}
	}
}

int main(){
	int i;
	in>>n>>m>>X>>Y;
	citire();
	for(i=i;i<=n;i++){
		if(i!=X)
			costf[i]=INF;
	}
	BF();
	out<<costf[Y];
	return 0;
}