Pagini recente » Cod sursa (job #1250839) | testround6 | Cod sursa (job #393241) | Cod sursa (job #2974366) | Cod sursa (job #24060)
Cod sursa(job #24060)
const inf=99000099;
type pe=^e;
e=record
c:integer;
who:longint;
kov:pe;
end;
var f,f2:text;
t,t2:byte;
n,m,s,i,j,l1,l2:longint;
a,l:array[1..50000] of pe;
min,min2:array[1..50000] of longint;
w:array[1..5000000] of word;
h:pe;
begin
assign(f,'distante.in');
reset(f);
assign(f2,'distante.out');
rewrite(f2);
readln(f,t);
for t2:=1 to t do
begin
readln(f,n,m,s);
for i:=1 to n do begin
read(f,min2[i]);
new(a[i]);
a[i]^.kov:=nil;
l[i]:=a[i];
end;
for i:=1 to m do
begin
readln(f,l1,l2,j);
new(h);
h^.c:=j;
h^.who:=l2;
h^.kov:=nil;
l[l1]^.kov:=h;
l[l1]:=h;
new(h);
h^.c:=j;
h^.who:=l1;
h^.kov:=nil;
l[l2]^.kov:=h;
l[l2]:=h;
end;
l1:=1;
w[1]:=s;
l2:=2;
for i:=1 to n do
min[i]:=inf;
min[s]:=0;
while l1<>l2 do
begin
j:=w[l1];
h:=a[j]^.kov;
while h<>nil do begin
if min[j]+h^.c<min[h^.who] then
begin
min[h^.who]:=min[j]+h^.c;
w[l2]:=h^.who;
inc(l2);
end;
h:=h^.kov;
end;
inc(l1);
end;
for i:=1 to n do
if min[i]<>min2[i] then break;
if i=n then writeln(f2,'DA')
else writeln(f2,'NU');
end;
close(f);
close(f2);
end.