Cod sursa(job #603641)

Utilizator SpiderManSimoiu Robert SpiderMan Data 18 iulie 2011 00:04:27
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
# include <algorithm>
# include <cstdio>
# include <vector>
using namespace std;

const char *FIN = "mese.in", *FOU = "mese.out";
const int MAX = 100005;

# define x first
# define y second

int N, S, df;
vector <int> G[MAX];
pair <short, int> dp[MAX];

void dfs (int N) {
    for (vector <int> :: iterator it = G[N].begin (); it != G[N].end (); *it = dp[*it++].x) {
        dfs (*it), dp[N].y += dp[*it].y;
    }
    sort (G[N].begin (), G[N].end ());
    for (vector <int> :: iterator it = G[N].begin (); it != G[N].end (); ++it) {
        if (dp[N].x + *it > S) break ;
        dp[N].x += *it, --dp[N].y;
    }
}

int main (void) {
    freopen (FIN, "r", stdin);

    scanf ("%d %d", &N, &S);
    for (int i = 1, sef, varsta; i <= N; ++i) {
        scanf ("%d %d", &sef, &varsta);
        G[sef].push_back (i), dp[i] = make_pair (varsta, 1);
        if (sef == 0) df = i;
    }
    dfs (df);
    fprintf (fopen (FOU, "w"), "%d", dp[df].y);
}