Cod sursa(job #384786)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 20 ianuarie 2010 22:38:36
Problema Mese Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#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;
}