Cod sursa(job #324294)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 15 iunie 2009 15:41:13
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#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]++;}	
	}
}