Pagini recente » Cod sursa (job #683142) | Cod sursa (job #2593412) | Cod sursa (job #51624) | Cod sursa (job #1715233) | Cod sursa (job #6141)
Cod sursa(job #6141)
const inf=100000;
var ma,zero:array[1..1000,1..1000]of longint;
mark,v,rez,zerov:array[1..10000]of longint;
n,m,a,b,c,i,j,p,min,t,k:longint;
ok:boolean;
begin
assign(input,'distante.in');reset(input);
assign(output,'distante.out');rewrite(output);
readln(t);
for k:=1 to t do
begin
ma:=zero;
v:=zerov;
mark:=zerov;
readln(n,m,p);
for i:=1 to n do
read(rez[i]);
for i:=1 to 100 do
for j:=1 to 100 do
ma[i,j]:=inf;
for i:=1 to 100 do
v[i]:=inf;
for i:=1 to m do
begin
readln(a,b,c);
ma[a,b]:=c;
ma[b,a]:=c;
end;
mark[p]:=1;
for i:=1 to n do
v[i]:=ma[p,i];
ok:=true;
for j:=1 to n-1 do
begin
min:=1;
for i:=2 to n do
if (mark[i]=0)and(v[i]<v[min]) then
min:=i;
mark[min]:=1;
for i:=1 to n do
if mark[i]=0 then
if v[i]>v[min]+ma[min,i] then
v[i]:=v[min]+ma[min,i];
end;
for i:=1 to n do
if v[i]=inf then
v[i]:=0;
ok:=true;
for i:=1 to n do
if v[i]<>rez[i] then
ok:=false;
if ok then
writeln('DA')
else
writeln('NU');
end;
close(input);close(output);
end.