Pagini recente » Cod sursa (job #746629) | Cod sursa (job #168053) | Cod sursa (job #2331034) | Cod sursa (job #702543) | Cod sursa (job #974785)
Cod sursa(job #974785)
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.