Cod sursa(job #460245)

Utilizator 05_YohnE1 La5c01 05_Yohn Data 1 iunie 2010 18:46:21
Problema Cerere Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.96 kb
type pnod=^nod;
     nod=record
     info:longint;
     urm:pnod;
     end;

var q:pnod;
v:array[1..100001]of pnod;
copil:array[1..100001]of boolean;
k,sol,s:array[1..100001]of longint;
i,a,b,n:longint;

procedure dfs(nod,niv:longint);
var q:pnod;
begin
s[niv]:=nod;
if k[nod]<>0 then sol[nod]:=sol[s[niv-k[nod]]]+1;
q:=v[nod];
while q<>nil do begin
      dfs(q^.info,niv+1);
      q:=q^.urm;
      end;
end;


begin
assign(input,'cerere.in'); reset(input);
assign(output,'cerere.out');rewrite(output);
read(n);
for i:=1 to n do read(k[i]);
fillchar(copil,sizeof(copil),false);
for i:=1 to n-1 do begin
    read(a,b);
    new(q);
    q^.info:=b;
    q^.urm:=v[a];
    v[a]:=q;
    copil[b]:=true;
end;
i:=1;
while i<=n do
      if copil[i] then inc(i)
                  else begin
                       dfs(i,1);
                       inc(i);
                       end;
for i:=1 to n do write(sol[i],' ');
close(output);
end.