Pagini recente » Cod sursa (job #2453480) | Cod sursa (job #2244337) | Cod sursa (job #2410852) | Cod sursa (job #875834)
Cod sursa(job #875834)
#include<stdio.h>
int T,n,m,start[50003], t[3][100003],d[50003],s,viz[50003],nr,er;
void citire()
{
int k,i,a,b,c;
scanf("%d %d %d",&n,&m,&s);
for (i=1;i<=n;i++)
{
start[i]=0;
viz[i]=0;
scanf("%d",d+i);
}
k=0;
for (i=1;i<=m;i++)
{
scanf("%d %d %d",&a,&b,&c);
k++;
t[0][k]=b;
t[1][k]=c;
t[2][k]=start[a];
start[a]=k;
}
}
void df(int vf)
{
viz[vf]=1;
nr++;
for (int i=start[vf];i;i=t[2][i])
{
int v=t[0][i];
if (viz[v]==0 && d[vf]+ t[1][i]==d[v])
{
df(v);
}
else if (viz[v]==0 && d[vf]+ t[1][i]<d[v]) er++;
}
}
int main()
{
freopen("distante.in","rt",stdin);
freopen("distante.out","wt",stdout);
scanf("%d",&T);
while (T)
{
citire();
nr=0;
er=0;
df(s);
if (nr==n && er==0) printf("DA\n");
else printf("NU\n");
T--;
}
fclose(stdout);
fclose(stdin);
return 0;
}