Informatika gyűjtemény

Egy szinttel feljebb pr_kepzes.pas

2004050607080910

NézetNyomtat

pr_kepzes.pas (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
program kepzes;

var t,t2:text; p,r,e,gy,te,ki:array[0..100000] of longint; //ki: 1:van 2:nincs
i,n,db:longint;

procedure tolt(l:longint);
var ii:longint;
begin
if gy[l]>0 then begin
ii:=gy[l];
while ii>0 do begin
tolt(ii);
e[l]:=e[l]+r[ii];
if e[ii]<r[ii] then r[l]:=r[l]+e[ii] else r[l]:=r[l]+r[ii];
ii:=te[ii];
end;
end; end;

procedure kiwi(l:longint);
begin
if ki[p[l]]=0 then kiwi(p[l]);
if ki[p[l]]=2 then ki[l]:=1;
if ki[p[l]]=1 then begin if r[l]<=e[l] then ki[l]:=1 else ki[l]:=2; end;
end;


begin
assign(t,'kepzes.be'); reset(t); readln(t,n);
for i:=1 to n do read(t,p[i]); close(t);

for i:=1 to n do e[i]:=0;
for i:=1 to n do r[i]:=1;

for i:=1 to n do gy[i]:=0;
for i:=1 to n do te[i]:=0;

for i:=1 to n do if gy[p[i]]=0 then gy[p[i]]:=else begin
te[i]:=gy[p[i]]; gy[p[i]]:=i;
end;

for i:=1 to n do ki[i]:=0;
tolt(1); ki[0]:=2;

for i:=1 to n do kiwi(i);
db:=0;
for i:=1 to n do if ki[i]=1 then inc(db);

assign(t2,'kepzes.ki'); rewrite(t2);
writeln(t2,db);
for i:=1 to n do if ki[i]=1 then write(t2,i,' ');
close(t2);



end.
(Vissza)