Pagini recente » Cod sursa (job #302513) | Cod sursa (job #3284725) | Cod sursa (job #1577947) | Cod sursa (job #3264448) | Cod sursa (job #23612)
Cod sursa(job #23612)
#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;
}