Pagini recente » Cod sursa (job #282242) | Cod sursa (job #1495752) | Cod sursa (job #407626) | Cod sursa (job #1019975) | Cod sursa (job #299950)
Cod sursa(job #299950)
#include<stdio.h>
const int inf=1000000;
struct nod { int x,y,c;
} a[200001];
int n,m,t,s,d1[50001],d[50001];
void citire()
{ int i;
scanf("%d%d%d",&n,&m,&s);
for(i=1;i<=n;i++)
{ scanf("%d",&d1[i]);
d[i]=inf;
}
d[s]=0;
for(i=1;i<=m;i++)
{ scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].c);
a[i+m].x=a[i].y;
a[i+m].y=a[i].x;
a[i+m].c=a[i].c;
if(a[i].x==s) d[a[i].y]=a[i].c;
if(a[i].y==s) d[a[i].x]=a[i].c;
}
}
void bford()
{ int cont=1,i;
while(cont)
{ cont=0;
for(i=1;i<=2*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=1;
}
}
}
int verif()
{ int i;
for(i=1;i<=n;i++)
if(d[i]!=d1[i]) return 0;
return 1;
}
int main()
{ int i;
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
for(i=1;i<=t;i++)
{ citire();
bford();
if(verif()) printf("DA\n");
else printf("NU\n");
}
fclose(stdin);
fclose(stdout);
return 0;
}