Pagini recente » Cod sursa (job #1692220) | Cod sursa (job #1454041) | Cod sursa (job #442906) | Cod sursa (job #2842655) | Cod sursa (job #189077)
Cod sursa(job #189077)
#include <stdio.h>
#define INF 100001
#define Nmax 50001
int v[Nmax],a[1000][1000];
int t,n,m,s;
void scan()
{
freopen("distante.in", "r",stdin);
freopen("distante.out", "w",stdout);
scanf("%d", &t);
}
inline int verifica()
{
if(v[s])
return 0;
for(int y=1;y<=n;++y)
if(y!=s)
{
int ok=0;
for(int x=1;x<=n;++x)
if(v[x]+a[x][y]==v[y])
ok=1;
if(!ok)
return 0;
}
return 1;
}
void solve()
{
int x,y,e;
for(int ti=1;ti<=t;++ti)
{
int ok=1;
scanf("%d%d%d", &n,&m,&s);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
a[i][j]=INF;
for(int i=1;i<=n;++i)
{
scanf("%d", &e);
v[i]=e;
}
for(int i=1;i<=m;++i)
{
scanf("%d %d %d\n", &x,&y,&e);
a[x][y]=e;
if(v[x]+e<v[y])
ok=0;
}
if( verifica() && ok)
printf("DA\n");
else
printf("NU\n");
}
}
int main()
{
scan();
solve();
return 0;
}