Cod sursa(job #23612)

Utilizator Binary_FireFlorin Pg Binary_Fire Data 1 martie 2007 07:34:10
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define fin  "distante.in"
#define fout "distante.out"
#define Nmax 50001 //
#define Mmax 100001 //

int T,N,M,s,d[Nmax],p[Nmax],good;

int main() {
int i,x,y,c,list[Mmax][3];

	freopen(fin,"r",stdin); freopen(fout,"w",stdout);

	scanf("%i",&T);

	for (;T>0;--T) {
		scanf("%i%i%i",&N,&M,&s);

		memset(p,0,(N+1)*sizeof(int));

		for (i=1;i<=N;++i) scanf("%i",&d[i]);

		for (i=1;i<=M;++i)

			scanf("%i%i%i",&list[i][0],&list[i][1],&list[i][2]);

		good=1;

		for (i=1;i<=M;++i) {
			x=list[i][0];
			y=list[i][1];
			c=list[i][2];
			if (d[x]+c<d[y]) good=0;
			if (d[x]+c==d[y]) p[y]=1;

			x=list[i][1];
			y=list[i][0];
			if (d[x]+c<d[y]) good=0;
			if (d[x]+c==d[y]) p[y]=1;

		}

		p[s]=1;

		if (d[s]!=0) good=0;

		for (i=1;i<=N;++i)
			if (p[i]==0) good=0;

		if (good) printf("DA\n");

		else printf("NU\n");

	}

	fclose(stdin); fclose(stdout);

	return 0;
}