Pagini recente » Cod sursa (job #2762516) | Cod sursa (job #2407439) | Cod sursa (job #1233389) | Cod sursa (job #511788) | Cod sursa (job #251759)
Cod sursa(job #251759)
const inf=10000;
const nmax=10000;
var f,g:text;
ok:boolean;
c:array[1..nmax,1..nmax]of integer;
df,d,p:array[1..nmax]of longint;
s:array[1..nmax]of 0..1;
x1,x,y,min,n,i,m,j,k:longint;
i1,t:byte;
begin
assign(f,'distante.in');
reset(f);
assign(g,'distante.out');
rewrite(g);
readln(f,t);
for i1:=1 to t do
begin
readln(f,n,m,x1);
for i:=1 to n do
read(f,df[i]);
for i:=1 to n do
for j:=1 to n do
c[i,j]:=inf;
for i:=1 to m do
begin
readln(f,x,y,k);
c[x,y]:=k;
end;
for i:=1 to n do
begin
d[i]:=c[x1,i];
if d[i]<>inf then p[i]:=x
else p[i]:=0;
end;
s[x1]:=1;
p[x1]:=0;
repeat
ok:=false;
min:=inf;
for i:=1 to n do
if (s[i]=0) and(d[i]<min) then
begin
min:=d[i];
y:=i;
ok:=true;
end;
if ok then begin
s[y]:=1;
for i:=1 to n do
if (s[i]=0) and (d[i]>d[y]+c[y,i]) then
begin
d[i]:=d[y]+c[y,i];
p[i]:=y;
end;
end;
until not ok;
d[x1]:=0;
ok:=true;
for i:=1 to n do
if d[i]<>df[i] then
begin
ok:=false;
break;
end;
if ok then writeln(g,'DA')
else writeln(g,'NU');
end;
close(g);
end.