Cod sursa(job #974785)

Utilizator t.g.g.tt.g.g.t t.g.g.t Data 18 iulie 2013 12:53:25
Problema Cerere Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.25 kb
type lista=^nod;
     nod=record
       n:longint;
       f:lista;
     end;

var a:array[0..100005]of lista;
    c:array[0..100005]of lista;
    b:array[0..100005]of longint;
    r:array[0..100005]of longint;
    l:array[0..100005]of longint;
    buf1,buf2:array[1..1 shl 17]of char;
    n,i,t,f,nodul:longint;
    r2:lista;

procedure parc(n,i:longint);
  var nod:lista;
  begin
    nod:=a[n]^.f; r[n]:=r[l[i-b[n]]]+1; if b[n]=0 then r[n]:=0;
    while nod<>nil do
      begin
        l[i+1]:=nod^.n;
        parc(nod^.n,i+1);
        nod:=nod^.f;
      end;
  end;

begin
  assign(input,'cerere.in'); reset(input); settextbuf(input,buf1);
  readln(n); new(a[0]); a[0]^.f:=nil;
  for i:=1 to n do begin read(b[i]); new(c[i]); c[i]^.n:=0; c[i]^.f:=nil; new(a[i]); a[i]^.f:=c[i]; end;
  for i:=1 to n-1 do
    begin
      readln(t,f);
      c[t]^.n:=f;
      new(c[t]^.f); c[t]^.f^.f:=nil;
      c[t]:=c[t]^.f;
      l[f]:=1;
    end;
  for i:=1 to n do
    begin
      if l[i]=0 then nodul:=i;
      if a[i]^.f^.n=0 then a[i]^.f:=nil;
      c[i]^.n:=0;
    end;
  l[1]:=nodul;
  parc(nodul,1);
  assign(output,'cerere.out'); rewrite(output); settextbuf(output,buf2);
  for i:=1 to n do write(r[i],' ');
  close(output);
end.