Cod sursa(job #1359488)

Utilizator atatomirTatomir Alex atatomir Data 24 februarie 2015 22:58:45
Problema Mese Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

#define maxN 100111
#define itt vector<long>::iterator

long n,s,i,dad,age;
vector<long> list[maxN];

long cnt[maxN],act[maxN];


void dfs(long node){
    vector<long> tmp;
    tmp.clear();
    for(itt it=list[node].begin();it!=list[node].end();it++) {
        dfs(*it);
        cnt[node] += cnt[*it];
        tmp.push_back(act[*it]);
    }

    if(list[node].empty()){
        cnt[node] = 1;
        return;
    }

    sort(tmp.begin(),tmp.end());
    for(i=0;i<tmp.size();i++){
        if(act[node]+tmp[i]>s) break;
        act[node] += tmp[i];
    }

    cnt[node] += 1 - i;
}

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

    scanf("%ld %ld",&n,&s);
    for(i=1;i<=n;i++){
        scanf("%ld %ld",&dad,&age);
        list[dad].push_back(i);
        act[i] = age;
    }

    dfs(0);
    printf("%ld",cnt[0]);

    return 0;
}