Pagini recente » Cod sursa (job #1376366) | Cod sursa (job #1513195) | Cod sursa (job #796622) | Cod sursa (job #1138011) | Cod sursa (job #344526)
Cod sursa(job #344526)
#include<cstdio>
const int N = (1<<16);
const int M = (1<<17);
struct muchie
{
int x,y,c;
};
int n,m,s,d[N];
muchie v[M];
void citire()
{
int i;
scanf("%d%d%d",&n,&m,&s);
for(i=1 ; i<=n ; ++i)
scanf("%d",&d[i]);
for(i=1 ; i<=m ; ++i)
scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].c);
}
bool verifica()
{
int i,x,y,c;
bool b[N]={false};
for(i=1 ; i<=m ; ++i)
{
x=v[i].x; y=v[i].y; c=v[i].c;
if(d[x]+c<d[y])
return false;
if(d[y]+c<d[x])
return false;
if(d[x]+c==d[y])
b[y]=true;
if(d[y]+c==d[x])
b[x]=true;
}
for(i=1 ; i<=n ; ++i)
if(i!=s && !b[i])
return false;
return true;
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
int t;
bool ok;
scanf("%d",&t);
while(t--)
{
citire();
ok=verifica();
if(ok)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}