Cod sursa(job #146261)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 1 martie 2008 14:51:04
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#include <string.h>

long long n, m, s, t, d[50005], viz[50005];

int main()
{
	freopen("distante.in","r",stdin);
	freopen("distante.out","w",stdout);

	scanf("%lld",&t);
	long long i, ok, x, y, c;
	while (t--)
	{
		ok = 1; 
		scanf("%lld %lld %lld",&n,&m,&s);
		for (i = 1; i <= n; i++) {scanf("%lld",&d[i]); viz[i] = 0;}
		viz[s] = 1;
		if (d[s]) ok = 0;
		else
 		for (i = 1; i <= m; i++)
		{
			scanf("%lld %lld %lld",&x,&y,&c);
			if (d[x] + c < d[y])  ok = 0;
			else if (d[x] + c == d[y]) viz[y] = 1;
			if (d[y] + c < d[x])  ok = 0;
			else if (d[y] + c == d[x]) viz[x] = 1;
		}		
		for (i = 1; i <= n; i++) if (!viz[i]) ok = 0;
		if (ok) printf("DA\n");
		else printf("NU\n");
	}
	return 0;
}