Pagini recente » Cod sursa (job #724448) | Cod sursa (job #1290004) | Cod sursa (job #1000043) | Cod sursa (job #1633454) | Cod sursa (job #48147)
Cod sursa(job #48147)
//campion mese
type pnod = ^tnod;
tnod = record
x:longint;
next:pnod;
end;
var n,s,rad,rez,nrfii:longint;
tata,sum:array[0..100003] of longint;
varsta:array[1..100000] of byte;
arb:array[1..100000] of pnod;
sumfii: array[1..100000] of longint;
procedure addlist(nod,fiu:longint);
var p:pnod;
begin
new(p); p^.x:=fiu; p^.next:=arb[nod];
arb[nod]:=p;
end;
procedure citire;
var i,tat,v:longint;
begin
assign(input,'mese.in'); reset(input);
readln(n,s);
for i:=1 to n do
begin
readln(tat,v);
addlist(tat,i);
tata[i]:=tat;
if tat = 0 then rad:=i;
varsta[i]:=v;
end;
closE(input);
end;
procedure df(nod : longint);
var p:pnod;
begin
if sum[nod] <> 0 then exit;
p:=arb[nod]; sum[nod]:=varsta[nod];
while p <> nil do
begin
df(p^.x);
sum[nod]:=sum[nod]+sum[p^.x];
p:=p^.next;
end;
end;
procedure Sort(l, r: longint);
var
i, j, x,y : longint;
begin
i := l; j := r; x := sumfii[(l+r) DIV 2];
repeat
while sumfii[i] < x do i := i + 1;
while x < sumfii[j] do j := j - 1;
if i <= j then
begin
y := sumfii[i]; sumfii[i] := sumfii[j]; sumfii[j] := y;
i := i + 1; j := j - 1;
end;
until i > j;
if l < j then Sort(l, j);
if i < r then Sort(i, r);
end;
procedure df2(nod:longint);
var p:pnod;
begin
p:=arb[nod];
sum[nod]:=varsta[nod];
while p <> nil do
begin
df2(p^.x);
sum[nod]:=sum[nod]+sum[p^.x];
p:=p^.next;
end;
p:=arb[nod]; nrfii:=0;
while p <> nil do
begin
inc(nrfii);
sumfii[nrfii]:=sum[p^.x];
p:=p^.next;
end;
if nrfii > 0 then
begin
sort(1,nrfii);
while sum[nod] > s do
begin
sum[nod]:=sum[nod] - sumfii[nrfii];
dec(nrfii);
inc(rez);
end;
end;
end;
begin
citire;
//df(rad);
df2(rad);
assign(output,'mese.out'); rewrite(output);
writeln(rez+1);
close(output);
end.