Cod sursa(job #272606)

Utilizator ada_sAda-Mihaela Solcan ada_s Data 7 martie 2009 15:06:39
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
const long NMAX=50010;
const long MMAX=100010;
long a[MMAX], b[MMAX], dist[NMAX], n, m, s, i;
int c[MMAX], t;
bool corect, gasit[NMAX];

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