Cod sursa(job #680451)

Utilizator andreifirstCioara Andrei Ioan andreifirst Data 15 februarie 2012 17:15:03
Problema Cerere Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.1 kb
type muchie = ^nod;
     nod=record n:longint; a:muchie; end;

var k:array[1..100000] of longint;         //vectorul de sarituri
    r:array [1..100000] of longint;         //raspunsul
    v:array[1..100000] of muchie;          //reprezentarea pentru dfs
    dfsv:array[1..100000] of longint;
    jmen1, jmen2:int64;
    i, j, n, x, y:longint;
    f, g:text;
    p:muchie;
    ok:boolean;
    c:char;
    buf1, buf2:array [1.. 1 shl 17] of char;

procedure dfs(fx, niv:longint);
var fp:muchie;
    f1, f2, fj:longint;
  begin
  fp:=v[fx];

  dfsv[niv]:=fx;
  if k[fx]<>0 then r[fx]:=r[dfsv[niv-k[fx]]]+1;

  while fp <> nil do begin dfs(fp^.n, niv+1); fp:=fp^.a; end;
  end;

begin
assign (f, 'cerere.in'); settextbuf (f, buf1); reset (f);
assign (g, 'cerere.out'); settextbuf (g, buf2); rewrite (g);

readln (f, n);

for i:= 1 to n do read (f, k[i]);
for i := 1 to n-1 do
  begin
  read (f, x, y);
  new(p); p^.n:=y; p^.a:=v[x]; v[x]:=p;
  jmen1:=jmen1+y;
  end;

jmen2:=(n*n+n) div 2 - jmen1;
dfs (jmen2, 1);

for i := 1 to n do write (g, r[i], ' ');
close (f); close (g);
end.