Cod sursa(job #482652)

Utilizator S7012MYPetru Trimbitas S7012MY Data 4 septembrie 2010 13:05:26
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#include <queue>
#define DN 30005
using namespace std;

struct nod {
	int x,cost;
	nod *urm;
} *v[DN];

void adaugare(int x, int y, int cost) {
	nod *p;
	p=new nod;
	p->x=y;
	p->cost=cost;
	p->urm=v[x];
	v[x]=p;
}

int n,m,x,y,viz[DN];

void bfs(int sursa) {
	viz[sursa]=1;
	nod *p;
	queue<int> coada;
	coada.push(sursa);
	for( ;!coada.empty();coada.pop() )
		for(p=v[coada.front()];p!=NULL; p=p->urm) 
			if(!viz[p->x]) {
				viz[p->x]=viz[coada.front()]+p->cost;
				coada.push(p->x);
			}
}

int main()
{
	int cost,a,b;
	freopen("sate.in","r",stdin);
	freopen("sate.out","w",stdout);
	scanf("%d %d %d %d",&n,&m,&x,&y);
	for(int i=1; i<=m; ++i) {
		scanf("%d %d %d",&a,&b,&cost);
		adaugare(a,b,cost);
		adaugare(b,a,-cost);
	}
	bfs(x);
	printf("%d",viz[y]-1);
	return 0;
}