Pagini recente » Cod sursa (job #2704501) | Cod sursa (job #514327) | Cod sursa (job #1396132) | Cod sursa (job #1160765) | Cod sursa (job #1365640)
program distante;
const inf=maxlongint;
var d,di,start:array[1..50000] of longint;
viz:array[1..50000] of 0..1;
cd:array[1..200000] of longint;
t:array[0..2,1..200000] of longint;
st,sf,i,j,n,m,s,k,opt,ii,x,y,z,p:longint;
ok:boolean;
bufin,bufout:array[1..200000] of byte;
begin
assign(input,'distante.in'); reset(input);
assign(output,'distante.out'); rewrite(output);
settextbuf(input,bufin);
settextbuf(output,bufout);
readln(opt);
for ii:=1 to opt do
begin
readln(n,m,s);
for i:=1 to n do
read(di[i]);
k:=0;
for i:=1 to m do
begin
readln(x,y,z);
inc(k);
t[0,k]:=y;
t[1,k]:=start[x];
start[x]:=k;
t[2,k]:=z;
inc(k);
t[0,k]:=x;
t[1,k]:=start[y];
start[y]:=k;
t[2,k]:=z;
end;
for i:=1 to n do
d[i]:=inf;
d[s]:=0;
cd[1]:=s;
st:=1;
sf:=1;
while st<=sf do
begin
p:=start[cd[st]];
viz[cd[st]]:=0;
while p<>0 do
begin
if d[t[0,p]]>d[cd[st]]+t[2,p] then
begin
d[t[0,p]]:=d[cd[st]]+t[2,p];
if viz[t[0,p]]=0 then
begin
inc(sf);
cd[sf]:=t[0,p];
viz[t[0,p]]:=1;
end;
end;
p:=t[1,p];
end;
inc(st);
end;
ok:=true;
for i:=1 to n do
if di[i]<>d[i] then
begin
ok:=false;
break;
end;
if ok then
writeln('DA')
else
writeln('NU');
for i:=1 to n do
begin
viz[i]:=0;
start[i]:=0;
end;
end;
close(input); close(output);
end.