Pagini recente » Cod sursa (job #111326) | Cod sursa (job #2056653) | Cod sursa (job #1272148) | Cod sursa (job #1829484) | Cod sursa (job #645053)
Cod sursa(job #645053)
#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];
int vc[NMAX],tata[NMAX];
short int q[NMAX];
char viz[NMAX];
int s;
vector<int> v[NMAX];
void dfs(int nod)
{
int i,vec,lim=v[nod].size();
viz[nod]=1;
if(!lim)
{
sol[nod]=1;
vc[nod]=age[nod];
return ;
}
for(i=0;i<lim;i++)
if(!viz[vec=v[nod][i]])
dfs(vec);
for(i=0;i<lim;i++)
{
vec=v[nod][i];
q[i+1]=vc[vec];
sol[nod]+=sol[vec];
}
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,val;
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[i],&val);
age[i]=val;
v[tata[i]].pb(i);
if(!tata[i])
start=i;
}
dfs(start);
printf("%d\n",sol[start]);
return 0;
}