Pagini recente » Cod sursa (job #116657) | Cod sursa (job #1997339) | Cod sursa (job #1524706) | Cod sursa (job #1719497) | Cod sursa (job #382889)
Cod sursa(job #382889)
#include <stdio.h>
#include <string.h>
#define Nmax 50001
#define Inf 0x3f3f3f3f
int d[Nmax],d1[Nmax];
int x[2*Nmax],y[2*Nmax],c[2*Nmax];
int n,m,nod,T;
int main()
{
int i,ok;
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d\n", &T);
while(T--)
{
scanf("%d %d %d\n", &n,&m,&nod);
memset(d,0,sizeof(d));
for (i=1;i<=n;++i)
scanf("%d ", &d1[i]);
for (i=1;i<=m;++i)
{
scanf("%d %d %d\n", &x[i], &y[i], &c[i]);
if (x[i]==nod)
d[x[i]]=c[i];
if (y[i]==nod)
d[y[i]]=c[i];
}
for (i=1;i<=n;++i)
if (d[i]==0)
d[i]=Inf;
d[nod]=0;
ok=1;
while(ok)
{
ok=0;
for (i=1;i<=m;++i)
{
if (d[y[i]]>d[x[i]]+c[i])
d[y[i]]=d[x[i]]+c[i],
ok=1;
if (d[x[i]]>d[y[i]]+c[i])
d[x[i]]=d[y[i]]+c[i],
ok=1;
}
}
ok=1;
for (i=1;i<=n;++i)
if (d[i]!=d1[i])
{
ok=0;
break;
}
if (ok==1)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}