Pagini recente » Cod sursa (job #506328) | Cod sursa (job #3002854) | Cod sursa (job #811702) | Cod sursa (job #2272532) | Cod sursa (job #633460)
Cod sursa(job #633460)
#include <cstdio>
#include <cstring>
#define file_in "distante.in"
#define file_out "distante.out"
#define nmax 150100
int T,N,M,nod;
int d[nmax];
int d1[nmax];
int x[nmax];
int y[nmax];
int c[nmax];
int i;
int main(){
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d", &T);
while(T--){
scanf("%d %d %d", &N, &M, &nod);
for (i=1;i<=N;++i)
scanf("%d", &d1[i]);
for (i=1;i<=N;++i) d[i]=0;
for (i=1;i<=M;++i){
scanf("%d %d %d", &x[i], &y[i], &c[i]);
if (x[i]==nod)
d[y[i]]=c[i];
if (y[i]==nod)
d[x[i]]=c[i];
}
for (i=1;i<=N;++i)
if (i!=nod)
if (d[i]==0)
d[i]=0x3f3f3f3f;
int ok=0;
while(!ok){
ok=1;
for (i=1;i<=M;++i){
if (d[x[i]]>d[y[i]]+c[i]){
d[x[i]]=d[y[i]]+c[i];
ok=0;
}
if (d[y[i]]>d[x[i]]+c[i]){
d[y[i]]=d[x[i]]+c[i];
ok=0;
}
}
}
for (i=1;i<=N;++i)
if (i!=nod)
if (d[i]==0x3f3f3f3f)
d[i]=0;
ok=1;
for (i=1;i<=N && ok;++i)
if (d1[i]!=d[i])
ok=0;
if (ok)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}