Pagini recente » Cod sursa (job #1613499) | Cod sursa (job #2776495) | Cod sursa (job #956346) | Cod sursa (job #2803912) | Cod sursa (job #45918)
Cod sursa(job #45918)
{
Problema mese
}
Program mese;
Type ref = ^elm;
elm = record
nod : Longint;
adr : ref;
end;
Var l : array[0..100000] of ref;
varsta : array[0..100000] of ^byte;
e, f : ref;
n, s, i, t, m : Longint;
sum : Integer;
Procedure df( nod : Longint; Var suma : Integer );
Var e, f : ref;
ss, s2 : Integer;
Begin
e := l[nod];
s2 := varsta[nod]^;
While e <> nil do
Begin
df( e^.nod, ss );
s2 := s2 + ss;
if s2 > s then
Begin
s2 := s2 -ss;
m := m+1;
if e = l[nod] then
Begin
l[nod] := l[nod]^.adr;
dispose( e );
e := l[nod];
End
else
Begin
f^.adr := e^.adr;
dispose( e );
e := f^.adr;
End;
End
else
Begin
f := e;
e := e^.adr;
End;
End;
suma := s2;
End;
Begin
{ Init stuff }
Assign( input, 'mese.in' );
Reset( input );
Readln( n, s );
For i := 0 to n do
Begin
l[i] := nil;
new( varsta[i] );
End;
varsta[0]^ := 0;
For i := 1 to n do
Begin
Readln( t, varsta[i]^ );
new( e );
e^.nod := i;
e^.adr := l[t];
l[t] := e;
End;
Close( input );
m := 1; { prima componenta va avea <= s }
{ *** Solving *** }
df( 0, sum );
{ Writing stuff }
Assign( output, 'mese.out' );
Rewrite( output );
Writeln( m );
Close( output );
{ Ending stuff }
For i := 0 to n do
Begin
dispose( varsta[i] );
While l[i] <> nil do
Begin
e := l[i];
l[i] := l[i]^.adr;
dispose( e );
End;
End;
End.