Pagini recente » Cod sursa (job #2214035) | Cod sursa (job #151786) | Cod sursa (job #2286785) | Cod sursa (job #134377) | Cod sursa (job #1698078)
#include <bits/stdc++.h>
const int DIM = 1 << 17;
using namespace std;
int D[DIM], V[DIM], C[DIM], N, S, K, T;
vector <int> Edge[DIM]; int answer;
void DFS( int node ) {
vector <int> :: iterator it;
for( it = Edge[node].begin(); it != Edge[node].end(); it ++ ) {
int next_node = *it;
DFS( next_node );
}
K = 0;
for( it = Edge[node].begin(); it != Edge[node].end(); it ++ ) {
int next_node = *it;
V[++K] = D[next_node];
}
sort( V + 1, V + K + 1 ); D[node] = C[node]; int i;
for( i = 1; i <= K && D[node] + V[i] <= S; i ++ )
D[node] += V[i];
answer += K - (i - 1);
return;
}
int main () {
FILE *input_file = fopen( "mese.in" , "r" );
FILE *output_file = fopen( "mese.out", "w" );
fscanf( input_file, "%d %d", &N, &S );
for( int i = 1; i <= N; i ++ ) {
fscanf( input_file, "%d %d", &T, &C[i] );
Edge[T].push_back( i );
}
DFS( 0 );
fprintf( output_file, "%d\n", answer + 1 );
return 0;
}