Pagini recente » Cod sursa (job #2147739) | Cod sursa (job #1076521) | Cod sursa (job #2324162) | Cod sursa (job #811838) | Cod sursa (job #392920)
Cod sursa(job #392920)
program pas;
type el=^longint;
var a:array[1..100,1..100] of el;
i,j,k,t,m,n,r:longint;
sol,d:array[1..50000] of el;
s:array[1..100] of integer;
f,g:text;
ok:boolean;
procedure citire;
var x,y,z:integer;
i,j:longint;
begin
readln(f,n,m,r);
For i:=1 to n do
begin
new(sol[i]);
new(d[i]);
read(f,sol[i]^);
end;
readln(f);
For i:=1 to m do
begin
readln(f,x,y,z);
new(a[x,y]);
new(a[y,x]);
a[x,y]^:=z;
a[y,x]^:=z;
end;
end;
procedure djk;
var i,j,min,p:longint;
begin
For i:=1 to n do
begin
new(d[i]);
If a[r,i]<>nil then
d[i]^:=a[r,i]^
else
d[i]^:=maxlongint;
end;
d[r]^:=maxlongint;
s[r]:=1;
For i:=1 to n-1 do
begin
min:=maxlongint;
For j:=1 to n do
If s[j]=0 then
If d[j]^<min then
begin
min:=d[j]^;
p:=j;
end;
s[p]:=1;
For j:=1 to n do
If s[j]=0 then
If a[p,j]<>nil then
If d[j]^>d[p]^+a[p,j]^ then
d[j]^:=d[p]^+a[p,j]^
end;
end;
begin
assign(f,'distante.in');
reset(f);
assign(g,'distante.out');
rewrite(g);
readln(f,t);
For i:=1 to t do
begin
citire;
djk;
ok:=true;
d[r]^:=0;
For j:=1 to n do
If sol[j]^<>d[j]^ then
begin
ok:=false;
break;
end;
If ok then
writeln(g,'DA')
else
writeln(g,'NU');
end;
close(f);
close(g);
end.