Cod sursa(job #574915)

Utilizator ion_calimanUAIC Ion Caliman ion_caliman Data 7 aprilie 2011 18:09:06
Problema Lowest Common Ancestor Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 0.7 kb
var     a,b:array[1..100000] of longint;
        n,m,i,j,t,u,v:longint;
        f,g:text;
begin
  assign(f,'lca.in');
  assign(g,'lca.out');
  reset(f);
  rewrite(g);
  readln(f,n,m);
  a[1]:=0;
  for i:=2 to n do
    read(f,a[i]);
  for i:=1 to n do
    b[i]:=0;

  for i:=n downto 2 do
    begin
      j:=a[i];
      while j>0 do
        begin
          inc(b[j]);
          j:=a[j];
        end;
    end;
  for i:=n downto 2 do
    begin
      j:=a[i];
      while b[j]<2 do
        j:=a[j];
      a[i]:=j;
    end;

  for i:=1 to m do
    begin
      readln(f,u,v);
      while u<>v do
        if u>v then u:=a[u] else v:=a[v];
      writeln(g,v);
    end;
  close(g);
end.