Pagini recente » Cod sursa (job #600143) | Cod sursa (job #1802502) | Cod sursa (job #2786828) | Cod sursa (job #1401270) | Cod sursa (job #31782)
Cod sursa(job #31782)
#include<stdio.h>
#define maxn 50001
struct ls {long nod; long c; ls *l;} *l[maxn];
void add(long x,long y, long c)
{ls *q = l[x];
if(!l[x]){l[x]=new ls; l[x]->nod=y; l[x]->c=c; l[x]->l=0;}
else {q=new ls; q->nod=y; q->c=c; q->l=l[x]; l[x]=q;}
}
long n,m,d[maxn],t,s;
int main()
{freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%ld\n",&t);
long i,j,x,y,c,ok,ok1;
for(i=1;i<=t;i++)
{scanf("%ld %ld %ld\n",&n,&m,&s);
for(j=1;j<=n;j++) {scanf("%ld ",&d[j]); l[j]=0;}
for(j=1;j<=m;j++) {scanf("%ld %ld %ld\n",&x,&y,&c); add(x,y,c); add(y,x,c);}
ok=1;
ok1=0;
j=1;
ls *q;
if(d[s]==0)
{while (ok && j<=n)
{if(j!=s)
{ok1=0;
q=l[j];
while (q)
{if(d[j]==( d[q->nod] + q->c)) ok1=1;
q=q->l;
}
if(!ok1) ok=0;
}
j++;
}
if(ok) printf("DA\n");
else printf("NU\n");
}
else {printf("NU\n");}
}
return 0;}