Pagini recente » Cod sursa (job #2781150) | Cod sursa (job #328687) | Cod sursa (job #568861) | Cod sursa (job #220214) | Cod sursa (job #579753)
Cod sursa(job #579753)
var v:array [1..100000] of longint;
niv:array [1..100000] of longint;
buf1, buf2:array [1.. 1 shl 17] of char;
i, j, m, n, x, y, p, l:longint;
s:string;
f, g:text;
procedure citire(var xx, yy:longint);
begin
xx:=0; yy:=0;
while (s[p]>='0') and (s[p]<='9') do
begin
xx:=xx*10+ord(s[p])-48;
inc(p);
end;
inc(p);
while (p<=l) do
begin
yy:=yy*10+ord(s[p])-48;
inc(p);
end;
readln(f, s);
p:=1;
l:=length(s);
end;
begin
assign (f, 'lca.in'); settextbuf (f, buf1); reset (f);
assign (g, 'lca.out'); settextbuf (g, buf2); rewrite (g);
read (f, n, m);
v[1]:=0; niv[1]:=1;
for i := 2 to n do
begin
read (f, v[i]); niv[i]:=niv[v[i]]+1;
end;
readln (f, s); readln (f, s); l:=length(s); p:=1;
for i := 1 to m do
begin
citire(x, y);
if niv[x]>niv[y] then begin while niv[x]<> niv[y] do x:=v[x]; end
else begin while niv[x]<> niv[y] do y:=v[y]; end;
while x <> y do begin x:=v[x]; y:=v[y]; end;
writeln (g, x);
end;
close (f); close (g);
end.