Cod sursa(job #109168)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 24 noiembrie 2007 20:39:27
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>
long int T,nt,n,m,s,i,okok,d[50001],ok[50001],a[100001],b[100001],c[100001];
int main()
{
     FILE *f,*g;f=fopen("distante.in","r");g=fopen("distante.out","w");
     fscanf(f,"%ld",&T);
     for(nt=1;nt<=T;nt++)
     {
	fscanf(f,"%ld%ld%ld",&n,&m,&s);
	for(i=1;i<=n;i++)
	{ fscanf(f,"%ld",&d[i]);ok[i]=0;}
	for(i=1;i<=m;i++)
	 fscanf(f,"%ld%ld%ld",&a[i],&b[i],&c[i]);
	okok=1;
	if(d[s])okok=0;
	else
	{
		for(i=1;i<=m;i++)
		{
		   if(d[a[i]]+c[i]<d[b[i]]){ okok=0;break;}
		   if(d[b[i]]+c[i]<d[a[i]]){ okok=0;break;}
		   if(d[b[i]]+c[i]==d[a[i]]) ok[a[i]]=1;
		   if(d[a[i]]+c[i]==d[b[i]]) ok[b[i]]=1;
		}
		for(i=1;i<=n;i++)
		 if(!ok[i]) { okok=0;break;}
	}
	if(okok) fprintf(g,"DA\n");
	else fprintf(g,"NU\n");
     }
     fcloseall();
     return 0;
}