Cod sursa(job #477013)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 13 august 2010 00:03:44
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
#include <string.h>

int n, m, s, ok, d[50002], viz[50002];

inline void verif (int x, int y, int c)
{
	if (d[x] + c < d[y])
		ok = 0;
	else
		if (d[x] + c == d[y])
			viz[y] = 1;
}

int main ()
{
	freopen ("distante.in", "r", stdin);
	freopen ("distante.out", "w", stdout);
	
	int t, i, x, y, c;
	
	scanf ("%d", &t);
	while (t --)
	{
		memset(viz, 0, sizeof (viz));
		ok = 1;
		
		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", &x, &y, &c);
			
			verif (x, y, c);
			verif (y, x, c);
		}
		
		for (i = 1; i <= n; i ++)
			if (i != s && !viz[i])
			{
				ok = 0;
				break;
			}
		
		printf ("%s\n", ok ? "DA" : "NU");
	}
	return 0;
}