Pagini recente » Cod sursa (job #2684812) | Cod sursa (job #991377) | Cod sursa (job #2527549) | Cod sursa (job #2689857) | Cod sursa (job #664358)
Cod sursa(job #664358)
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
#define NMAX 100005
#define pb push_back
int sol[NMAX],n;
short int age[NMAX];
short int q[NMAX],vc[NMAX];
int s;
vector<int> v[NMAX];
void dfs(int nod)
{
int i,lim=v[nod].size();
if(!lim)
{
sol[nod]=1;
vc[nod]=age[nod];
return ;
}
for(i=0;i<lim;i++)
dfs(v[nod][i]);
for(i=0;i<lim;i++)
{
q[i+1]=vc[v[nod][i]];
sol[nod]+=sol[v[nod][i]];
}
sort(q+1,q+lim+1);
int sum=age[nod];
for(i=1;i<=lim;i++)
if(sum+q[i]<=s)
sum+=q[i];
else
break;
sol[nod]-=(i-2);
vc[nod]=sum;
}
int main ()
{
int i,start=0,val,tata;
freopen("mese.in","r",stdin);
freopen("mese.out","w",stdout);
scanf("%d%d",&n,&s);
for(i=1;i<=n;i++)
{
scanf("%d%d",&tata,&val);
age[i]=val;
v[tata].pb(i);
if(!tata)
start=i;
}
dfs(start);
printf("%d\n",sol[start]);
return 0;
}