Cod sursa(job #608268)
#include<stdio.h>
#include<vector.h>
#define pb push_back
#define N 50001
#define INF 1000000
long i,k,c,n,m,s,t,l,j,d[N],f[N],q[INF],p,u;
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]=INF;
while(m--)
{scanf("%ld%ld%d",&i,&k,&c);
g[i].pb(k);
g[k].pb(i);
e[i].pb(c);
e[k].pb(c);}
q[0]=s,p=u=f[s]=0;
while(p<=u)
{j=q[p++];
for(i=0;i<g[j].size();j++)
if(f[j]>e[j][i]+f[g[j][i]])
f[j]=e[j][i]+f[g[j][i]],q[++u]=g[j][i];}
l=0;
for(i=1;i<=n;i++)
if(f[i]==d[i])
l++;
if(l==n)
printf("DA\n");
else
printf("NU\n");}
return 0;}