Pagini recente » Cod sursa (job #2903167) | Cod sursa (job #1447565) | Cod sursa (job #1395813) | tema | Cod sursa (job #326307)
Cod sursa(job #326307)
#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,K;
char buffer[Nmax];
void read(int &aux)
{
aux = 0;
for(;buffer[K] < '0' || buffer[K] > '9';++K);
for(;buffer[K] >= '0' && buffer[K] <= '9';++K)
aux = aux * 10 + buffer[K] - '0';
}
int main()
{
int i,j,ok,xx,yy,zz;
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d\n", &T);
fread(buffer,1,1<<23,stdin);
while(T--)
{
read(n); read(m); read(nod);
//scanf("%d %d %d\n", &n,&m,&nod);
memset(d,0,sizeof(d));
for (i=1;i<=n;++i)
// scanf("%d", &d1[i]);
read(d1[i]);
//scanf("\n");
for (i=1;i<=m;++i)
{
read(x[i]); read(y[i]); read(c[i]);
//scanf("%d %d %d", &x[i],&y[i],&c[i]);
if (x[i]==nod)
d[y[i]]=c[i];
}
for (i=1;i<=n;++i)
if (d[i]==0)
d[i]=Inf;
d[nod]=0;
ok=0;
while(!ok)
{
ok=1;
for (i=1;i<=m;++i)
if (d[y[i]]>d[x[i]]+c[i])
d[y[i]]=d[x[i]]+c[i],
ok=0;
else
if (d[x[i]]>d[y[i]]+c[i])
d[x[i]]=d[y[i]]+c[i],
ok=0;
}
for (i=1;i<=n;++i)
if (d[i]!=d1[i])
{
ok=0;
break;
}
if (ok)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}