Cod sursa(job #1264418)

Utilizator smaraldaSmaranda Dinu smaralda Data 15 noiembrie 2014 19:53:10
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;

#define ITERATOR vector <int>::iterator
const int NMAX = 100001;
vector <int> graph[NMAX];

int res, smax, age[NMAX];

void dfs (int node) {
    vector <int> sums;
    ITERATOR it;

    for(it = graph[node].begin(); it != graph[node].end(); ++ it) {
        dfs(*it);
        sums.push_back(age[*it]);
    }

    sort(sums.begin(), sums.end());
    for(it = sums.begin(); it != sums.end(); ++ it) {
        if(*it + age[node] > smax) {
            res += sums.size() - (it - sums.begin());
            break;
        }
        
        age[node] += *it;
    }
}

int main() {
    freopen("mese.in", "r", stdin);
    freopen("mese.out", "w", stdout);
    int n, i, dad, root;

    scanf("%d%d", &n, &smax);
    for(i = 1; i <= n; ++ i) {
        scanf("%d%d", &dad, &age[i]);
        graph[dad].push_back(i);
    }

    res = 1;
    dfs(0);

    printf("%d\n", res);
    return 0;
}