Pagini recente » Cod sursa (job #775150) | Cod sursa (job #1763270) | Cod sursa (job #3266068) | Cod sursa (job #2502542) | Cod sursa (job #1729655)
#include<cstdio>
#include<vector>
#include<algorithm>
#define MAXN 100010
using namespace std;
vector<int> g[MAXN];
int n,s,answer=0;
int cost[MAXN],sum[MAXN],temp[MAXN],index;
void DFS(int node){
int i,tables;
sum[node]=cost[node];
for(i=0;i<g[node].size();i++)
DFS(g[node][i]);
index=0;
for(i=0;i<g[node].size();i++){
index++;
temp[index]=sum[g[node][i]];
}
sort(temp+1,temp+index+1);
tables=index;
for(i=1;i<=index;i++){
if(sum[node]+temp[i]>s)
break;
sum[node]+=temp[i];
tables--;
}
answer+=tables;
}
int main(){
freopen("mese.in","r",stdin);
freopen("mese.out","w",stdout);
int i,x;
scanf("%d%d",&n,&s);
for(i=1;i<=n;i++){
scanf("%d%d",&x,&cost[i]);
g[x].push_back(i);
}
cost[0]=s+1;
DFS(0);
printf("%d",answer);
return 0;
}