Cod sursa(job #1698078)

Utilizator sucureiSucureiRobert sucurei Data 3 mai 2016 17:10:59
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#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;
}