Pagini recente » Cod sursa (job #2779663) | Cod sursa (job #2908752) | Cod sursa (job #1816363) | Cod sursa (job #1542136) | Cod sursa (job #680451)
Cod sursa(job #680451)
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.