Cod sursa(job #608266)
#include<stdio.h>
#include<vector.h>
#define pb push_back
#define N 50001
int c,t;
long i,k,n,m,s,l,j,d[N],f[N];
vector<long> g[N],e[N];
int main()
{freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
while(t--)
{scanf("%ld%ld%ld",&n,&m,&s);
for(i=1;i<=n;i++)
scanf("%ld",&d[i]),f[i]=d[i];
while(m--)
{scanf("%ld%ld%d",&i,&j,&c);
g[i].pb(j);
g[j].pb(i);
e[i].pb(c);
e[j].pb(c);}
for(i=1;i<=n;i++)
if(i!=s)
for(j=0;j<g[i].size();j++)
if(f[i]>e[i][j]+f[g[i][j]])
f[i]=e[i][j]+f[g[i][j]];
if(!d[s])
k=1;
else
k=0;
for(j=1;j<=n;j++)
if(j!=s&&f[j]==d[j])
k++;
if(k==n)
printf("DA\n");
else
printf("NU\n");}
return 0;}