Cod sursa(job #821852)

Utilizator lianaliana tucar liana Data 22 noiembrie 2012 18:43:38
Problema Distante Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>
#define nmax 50005
long n, m, s, t, ii, d[nmax], a, b, c, i, nrg;
bool ok, g[nmax];

int main()
{
	freopen("distante.in","r",stdin);
	freopen("distante.out","w",stdout);
	scanf("%ld",&t);
	for (ii=1;ii<=t;ii++)
	{
		scanf("%ld %ld %ld",&n,&m,&s);
		for (i=1;i<=n;i++)
		{	scanf("%ld",&d[i]);	g[i]=0;	}
		ok=1;	nrg=0;
		ok=!(d[s]>0);
		for (i=1;i<=m;i++)
		{
			scanf("%ld %ld %ld",&a,&b,&c);
			if (ok)
			{	
				if (d[a]+c==d[b])
				{	nrg+=1-g[b];	g[b]=1;	}
				if (d[a]+c<d[b])
					ok=0;
				
				if (d[b]+c==d[a])
				{	nrg+=1-g[a];		g[a]=1;	}
				if (d[b]+c<d[a])
					ok=0;
			}				
		}
		ok=ok&&(nrg==(n-1));
		if (ok)
			printf("DA\n");
		else
			printf("NU\n");
		
	}
	
	return 0;
}