Pagini recente » Cod sursa (job #126229) | Cod sursa (job #1560999) | Cod sursa (job #250865) | Cod sursa (job #1306762) | Cod sursa (job #710103)
Cod sursa(job #710103)
Program cerere;
type lista=^celula;
celula=record
inf:longint;
next:lista;
end;
var a,b,v,aux:array [0..100001] of longint;
c:array [1..100001] of lista;
r:lista;
i,n,x,y,l,j:longint;
b1,b2:array [1..1 shl 15] of char;
fi,fo:text;
procedure dfs(k:longint);
var r:lista;
begin
r:=c[k]; {if r<>nil then begin inc(l); aux[l]:=r^.inf; b[r^.inf]:=aux[l-a[r^.inf]+1]; end; }
while r<>nil do begin
inc(l); aux[l]:=r^.inf; b[r^.inf]:=aux[l-a[r^.inf]];
dfs(r^.inf);
dec(l);
r:=r^.next;
end;
{ inc(l); aux[l]:=r^.inf; b[r^.inf]:=aux[l-a[r^.inf]];}
end;
procedure solve(k:longint);
begin
if (v[b[k]]=0) and (a[b[k]]>0) then solve(b[k])
else l:=v[b[k]];
inc(l); v[k]:=l;
end;
begin
assign(fi,'cerere.in');
assign(fo,'cerere.out');
settextbuf(fi,b1); settextbuf(fo,b2);
reset(fi); rewrite(fo);
readln(fi,n);
for i:=1 to n do read(fi,a[i]); readln(fi);
for i:=1 to n-1 do begin
readln(fi,x,y);
new(r);
r^.inf:=y; r^.next:=c[x]; c[x]:=r;
end;
for i:=1 to n do if a[i]=0 then begin l:=1; aux[l]:=i; dfs(i); end;
for i:=1 to n do
if a[i]>0 then begin l:=0; solve(i); end;
for i:=1 to n do write(fo,v[i],' ');
close(fo);
end.