Cod sursa(job #732011)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 9 aprilie 2012 15:50:21
Problema Sate Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>

int i , n , m , st , dr , a , b , d,Fr[30010],C[30010],p,u,D[30010];

FILE*f=fopen("sate.in","r");
FILE*g=fopen("sate.out","w");

struct nod{
	int nr;
	int dist;
	nod *adr;
}*L[30010],*c;

void bfs(){
	C[1]=st;
	Fr[st]=1;Fr[0]=1;
	p=1;u=1;
	int ok=1;
	while(p<=u&&ok){
		c=L[C[p]];
		while(c!=NULL){
			if(Fr[(c->nr)*((c->nr)<=30009)]==0){
				Fr[c->nr]=1;
				C[++u]=c->nr;
				if((c->nr)<C[p])
					D[u]=D[p]-(c->dist);
				else
					D[u]=D[p]+(c->dist);
				if((c->nr)==dr){
					ok=0;break;
				}
			}
			c=(c->adr);
		}
		p++;
	}
	delete c;
}


int main(){
	fscanf(f,"%d %d %d %d",&n,&m,&st,&dr);
	nod *p;
	for(i=1;i<=m;i++){
		fscanf(f,"%d%d%d",&a,&b,&d);
		p=new nod;
		p->nr=b;
		p->dist=d;
		p->adr=L[a];
		L[a]=p;
		p=new nod;
		p->nr=a;
		p->dist=d;
		p->adr=L[b];
		L[b]=p;
	}
	delete p;
	bfs();
	fprintf(g,"%d",D[u]);
	return 0;
}