Cod sursa(job #279167)

Utilizator GagosGagos Radu Vasile Gagos Data 12 martie 2009 18:20:17
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
int n,m,s,a[50003],b[50003],c[50003],ok[50003],ok1,d[50003],t,i;
int main()
{
	freopen("distante.in","r",stdin);
	freopen("distante.out","w",stdout);
	scanf("%d\n",&t);
	for(;t;--t)
	{
		scanf("%d %d %d",&n,&m,&s);
		for(i=1;i<=n;++i)
			scanf("%d",d[i]);
		for(i=1;i<=m;++i)
			scanf("%d %d %d",&a[i],&b[i],&c[i]);
		if(d[s])
			printf("NU\n");
		else
		{
			ok[s]=1;
			ok1=0;
			for(i=1;i<=m;++i)
			{
				if(d[a[i]]+c[i]<d[b[i]])
				{
					ok1=1;
					break;
				}
				if(d[b[i]]+c[i]<d[a[i]])
				{
					ok1=1;
					break;
				}
				if(d[a[i]]+c[i]==d[b[i]])
					ok[a[i]]=1;
				if(d[b[i]]+c[i]==d[a[i]])
					ok[b[i]]=1;
			}
			for(i=1;i<=n;++i)
				if(!ok[i])
				{
					ok1=1;
					break;
				}
			if(ok1)
				printf("NU\n");
			else
				printf("DA\n");
		}
	}
	return 0;
}