Pagini recente » Cod sursa (job #627530) | Cod sursa (job #2676914) | Cod sursa (job #2072986) | Cod sursa (job #1749193) | Cod sursa (job #384786)
Cod sursa(job #384786)
#include<stdio.h>
#include<vector>
#include<algorithm>
#define nmax 100002
using namespace std;
int n,smax,s[nmax];
vector<int> v[nmax];
int dfs(int x)
{
int sol=0,i,lim=v[x].size(),nr=-1;
vector<int> aux;
for(i=0;i<lim;i++)
{
sol+=dfs(v[x][i]);
s[x]+=s[v[x][i]];
aux.push_back(s[v[x][i]]);
++nr;
}
if(s[x]<=smax)
sort(aux.begin(),aux.end());
for(i=nr;i>=0;i--)
{
if(s[x]<=smax)
break;
s[x]-=aux[i];
sol++;
}
return sol;
}
int main()
{
freopen("mese.in","r",stdin);
freopen("mese.out","w",stdout);
scanf("%d%d",&n,&smax);
int i,nod,r;
for(i=1;i<=n;i++)
{
scanf("%d%d",&nod,&s[i]);
if(nod==0)
r=i;
else
v[nod].push_back(i);
}
printf("%d\n",dfs(r));
return 0;
}