Pagini recente » Cod sursa (job #1984241) | Cod sursa (job #806286) | Cod sursa (job #1567559) | Cod sursa (job #1392510) | Cod sursa (job #139190)
Cod sursa(job #139190)
type adresai=^nodi;
nodi= record
poz,inf:longint;
adr:adresai;
end;
adresa=^nod;
nod= record
inf:longint;
adr:adresa;
end;
var n,m,x,y,i:longint;
t:array[1..250001]of byte;
vi:array[1..250001]of adresai;
vc:array[1..250001]of adresa;
st:array[1..250001]of longint;
rasp:array[1..350001]of longint;
q:adresai;
p:adresa;
procedure parcad(n,niv:integer);
var p:adresa;
begin
st[niv]:=n;
p:=vc[n];
q:=vi[n];
while(q<>nil)do
begin
if(niv-q^.inf<=0)then
rasp[q^.poz]:=0
else
rasp[q^.poz]:=st[niv-q^.inf];
q:=q^.adr;
end;
while(p<>nil)do
begin
parcad(p^.inf,niv+1);
p:=p^.adr;
end;
end;
begin
assign(input,'stramosi.in');
reset(input);
readln(n,m);
for i:=1 to n do
vc[i]:=nil;
for i:=1 to n do
begin
read(x);
if(x<>0)then
begin
t[i]:=1;
new(p);
p^.inf:=i;
p^.adr:=vc[x];
vc[x]:=p;
end;
end;
for i:=1 to m do
vi[i]:=nil;
for i:=1 to m do
begin
read(x,y);
new(q);
q^.inf:=y;
q^.poz:=i;
q^.adr:=vi[x];
vi[x]:=q;
end;
close(input);
for i:=1 to n do
if(t[i]=0)then
parcad(i,1);
assign(output,'stramosi.out');
rewrite(output);
for i:=1 to m do
writeln(rasp[i]);
close(output);
end.