Pagini recente » Cod sursa (job #2662332) | Cod sursa (job #184389) | Cod sursa (job #998926) | Cod sursa (job #2255927) | Cod sursa (job #403305)
Cod sursa(job #403305)
#include<stdio.h>
using namespace std;
long max=400000;
int t;
long n,m,d[50050],s,v[50050];
struct dist
{ long x,y,c;
} a[100200];
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
while(t>0)
{
t--;
scanf("%ld%ld%ld",&n,&m,&s);
for(int i=1;i<=n;i++)
scanf("%ld",&v[i]);
for(int i=1;i<=m;i++)
{ scanf("%ld%ld%ld",&a[i].x,&a[i].y,&a[i].c);
if(a[i].x==s) d[a[i].y]=a[i].c;
}
for(int i=1;i<=n;i++)
if(d[i]==0) d[i]=max;
int cont=2;
while(cont==2)
{ cont=0;
for(int i=1;i<=m;i++)
if(d[a[i].y]>d[a[i].x]+a[i].c)
{ d[a[i].y]=d[a[i].x]+a[i].c;
cont=2;
}
}
int ok=1;
d[1]=0;
for(int i=1;i<=n && ok;i++)
{ if(v[i]!=d[i]) ok=0;
}
if(ok==1) printf("DA\n");
else printf("NU\n");
for(int i=1;i<=n;i++)
d[i]=0;
}
fclose(stdin);
fclose(stdout);
return 0;
}