Pagini recente » Cod sursa (job #2253659) | Cod sursa (job #1950479) | Cod sursa (job #2546213) | Cod sursa (job #2393420) | Cod sursa (job #212337)
Cod sursa(job #212337)
#include <cstdio>
#include <string>
#define DIM 8192
#define oo 0x3f3f3f3f
char ax[DIM];
int pz;
inline void cit(int &x)
{
x=0;
while(ax[pz]<'0' || ax[pz]>'9')
if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
while(ax[pz]>='0' && ax[pz]<='9')
{
x=x*10+ax[pz]-'0';
if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
}
}
struct nod{ int x, y, c;};
nod a[200001];
int n, m, M,S;
int d[50001], d1[50001];
void bell()
{
int ok=1,i;
memset(d,oo, sizeof(d));
d[S]=0;
int p, q, c;
while(ok)
{
ok=0;
for(i=1;i<=M;++i)
{
p=a[i].x, q=a[i].y, c=a[i].c;
if(d[p] + c < d[q]) d[q]=d[p]+c, ok=1;
}
}
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
int T,p,q,c,i;
cit(T);
while(T--)
{
cit(n);cit(m);cit(S);
M=0;
for(i=1;i<=n;++i) cit(d1[i]);
while(m--)
{
cit(p);cit(q);cit(c);
a[++M].x=p;
a[M].y=q;
a[M].c=c;
a[++M].x=q;
a[M].y=p;
a[M].c=c;
}
bell();
int ok=1;
for(i=1;i<=n;++i) if(d1[i]!=d[i]){ ok=0;break;}
if(ok) printf("DA\n");
else printf("NU\n");
}
return 0;
}