Pagini recente » Cod sursa (job #1704733) | Cod sursa (job #1551079) | Istoria paginii runda/cerculdeinfo-lectiile9_10_11_12_13 | Istoria paginii runda/oni2011_9_1/clasament | Cod sursa (job #177625)
Cod sursa(job #177625)
#include <stdio.h>
const long NMAX=50051;
struct muchie {
long n1,n2,c;
}M[NMAX*2];
long D[NMAX],i,j,sursa,nteste,n,m,nm,contor,ok,ok2,rez[NMAX],nrez;
int main(){
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%ld",&nteste);
for (contor=1;contor<=nteste;contor++){
scanf("%ld%ld%ld",&n,&m,&sursa);
for(i=1;i<=n;i++) scanf("%ld",&D[i]);
for(i=1;i<=m;i++) scanf("%ld%ld%ld",&M[nm].n1,&M[nm].n2,&M[nm].c),nm++;
ok=1;
if (D[sursa]!=0) ok=0;
else{ for (i=1;i<=m && ok;i++)
if (D[M[i].n2]>D[M[i].n1]+M[i].c) ok=0;
if (ok){
ok2=0;
for (i=1;i<=m;i++)
if (M[i].n2!=sursa)
if (D[M[i].n1]+M[i].c==D[M[i].n2])
if (!rez[M[i].n2])nrez++;
else rez[M[i].n2]=1;
if (nrez==n-1) ok2=1;
}
}
if (ok && ok2) printf("DA\n");
else printf("NU\n");
nm=0,nrez=0;
for(i=1;i<=n;i++) rez[i]=0;
}
return 0;
}