Pagini recente » Cod sursa (job #2028352) | Cod sursa (job #816514) | Cod sursa (job #2004275) | Cod sursa (job #2821449) | Cod sursa (job #129516)
Cod sursa(job #129516)
const nmax=100100;
type pelem=^elem;
elem=record
info:longint;
next:pelem;
end;
var fi,fo:text;
n,i,v1,v2,fiu,radacina:longint;
s:array[1..nmax]of byte;
stramos,rezolv,dist,idist:array[1..nmax]of longint;
list:array[1..nmax]of pelem;
procedure qin(var first:pelem; vl:longint);
var p:pelem;
begin
new(p);
p^.info:=vl;
p^.next:=first;
first:=p;
end;
procedure qout(var first:pelem; var vl:longint);
var p:pelem;
begin
vl:=first^.info;
p:=first;
first:=first^.next;
dispose(p);
end;
procedure df(nod:longint);
var vl,rez:longint;
begin
s[nod]:=1;
while list[nod]<>nil do
begin
qout(list[nod],vl);
if s[vl]=0 then
begin
s[vl]:=1;
dist[vl]:=dist[nod]+1;
idist[dist[vl]]:=vl;
if stramos[vl]=0 then rezolv[vl]:=0
else
begin
rez:=dist[vl]-stramos[vl];
rezolv[vl]:=rezolv[idist[rez]]+1;
end;
df(vl);
end;
end;
end;
begin
assign(fi,'cerere.in'); reset(fi);
assign(fo,'cerere.out'); rewrite(fo);
read(fi,n);
for i:=1 to n do
read(fi,stramos[i]);
read(fi,radacina,fiu);
qin(list[radacina],fiu);
qin(list[fiu],radacina);
for i:=2 to n-1 do
begin
read(fi,v1,v2);
qin(list[v1],v2);
qin(list[v2],v1);
end;
dist[radacina]:=1;
idist[1]:=radacina;
df(radacina);
for i:=1 to n do
write(fo,rezolv[i],' ');
close(fi);
close(fo);
end.