Pagini recente » Cod sursa (job #1438794) | Cod sursa (job #900603) | Cod sursa (job #2554130) | Cod sursa (job #3262413) | Cod sursa (job #324294)
Cod sursa(job #324294)
#include<stdio.h>
#include<algorithm>
#define N 100010
using namespace std;
struct Nod{int inf;Nod *urm;};
Nod *s[N];
int t,n,V,i,v[N],m[N],cv[N],root;
void read(),solve(),DF(int nod,int p);
int main()
{
read();
solve();
return 0;
}
void read()
{
Nod *q;
freopen("mese.in","r",stdin);
freopen("mese.out","w",stdout);
scanf("%d%d",&n,&V);
for(i=1;i<=n;i++)
{
scanf("%d%d",&t,&v[i]);
if(t){q=new Nod;q->inf=i;q->urm=s[t];s[t]=q;}
else root=i;
}
}
void solve()
{
DF(root,1);
printf("%d\n",m[root]+1);
}
void DF(int nod,int p)
{
int top=p-1;Nod *q;
for(q=s[nod];q;q=q->urm)
{
DF(q->inf,top+1);
v[nod]+=v[q->inf];
m[nod]+=m[q->inf];
cv[++top]=v[q->inf];
}
if(top>=p)
{
sort(cv+p,cv+top+1);
while(v[nod]>V&&top>=p){v[nod]-=cv[top--];m[nod]++;}
}
}