Cod sursa(job #282472)

Utilizator andyciupCiupan Andrei andyciup Data 17 martie 2009 18:09:50
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>
#define N 30300
int n, m, x, y;
int *a[N], *b[N], deg[N]={0}, coada[N], d[N]={0};
void citesc(){
	int d, e, cost;
	scanf("%d", &n);
	scanf("%d", &m);
	scanf("%d", &x);
	scanf("%d", &y);
	while(m--){
		scanf("%d%d", &d, &e);
		scanf("%d", &cost);
		deg[e]++;
		deg[d]++;
	}
	int i;
	fclose(stdin);
	for(i=1; i<=n;++i){
		a[i]=new int[deg[i]+1];
		a[i][0]=0;
		b[i]=new int[deg[i]+1];
		b[i][0]=0;
	}
}

void aloc(){
	freopen("sate.in", "r", stdin);
	int d, e, cost;
	scanf("%d%d", &n, &m);
	scanf("%d%d", &x, &y);
	while(m--){
		scanf("%d%d", &d, &e);
		scanf("%d", &cost);
		a[e][++a[e][0]]=d;
		a[d][++a[d][0]]=e;
		b[e][++b[e][0]]=-cost;
		b[d][++b[d][0]]=cost;
	}
}


void bfs(){
	int p=1, u=0, scos, ad, i;
	coada[++u]=x;
	d[x]=0;
	
	while(p<=u){
		scos=coada[p++];
		for(i=1;i<=a[scos][0];++i)
		{
			ad=a[scos][i];
			if(d[ad]==0)
			{
				coada[++u]=ad;
				d[ad]=b[scos][i]+d[scos];
			}
		}
	}
	printf("%d\n",d[y]);
}

int main(){
	freopen("sate.in", "r", stdin);
	freopen("sate.out", "w", stdout);
	citesc();
	aloc();
	//printf("%d", a[1][1]);
	bfs();
	return 0;
}