Cod sursa(job #579726)

Utilizator andreifirstCioara Andrei Ioan andreifirst Data 12 aprilie 2011 13:42:19
Problema Lowest Common Ancestor Scor 90
Compilator fpc Status done
Runda Arhiva educationala Marime 0.69 kb
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:longint;
    f, g:text;

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;

for i := 1 to m do
  begin
  read (f, 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.