Pagini recente » Cod sursa (job #2293754) | Cod sursa (job #1648881) | Cod sursa (job #3223928) | Cod sursa (job #2683578) | Cod sursa (job #1359488)
#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;
}