Cod sursa(job #338679)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 6 august 2009 15:43:11
Problema Mese Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

#define file_in "mese.in"
#define file_out "mese.out"

#define Nmax 101000
#define pb push_back
#define pob pop_back

vector<int> v[Nmax];
int n,S,s[Nmax],suma,x,rad;

int cmp(int a, int b)
{   
    return s[a]<s[b];   
}   

int dfs(int nod)
{
	int i,nr=0;
	vector<int> :: iterator it;
	vector<int> p;
	
	for (it=v[nod].begin();it!=v[nod].end();++it)
	{
		nr+=dfs(*it);
		p.pb(*it);
	}
	
	
	sort(p.begin(),p.end(),cmp);
	for (i=p.size()-1; i>1 && s[nod]>S;--i)
	{
		s[nod]-=s[p[i]];
		p.pob();
	    nr++; 
	}
	
	return nr;
}
		 

int main()
{
	int i;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);

	
    scanf("%d %d", &n,&S);
	for (i=1;i<=n;++i)
	{
		scanf("%d %d", &x,&s[i]);
		if (x==0) rad=i;
		else v[x].pb(i);
	}
	
	//nr=0;
	
	printf("%d", dfs(rad)+1);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}