Cod sursa(job #338775)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 6 august 2009 21:22:56
Problema Mese Scor 100
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);
		s[nod]+=s[*it];
		p.pb(*it);
	}


	sort(p.begin(),p.end(),cmp);
	for (i=p.size()-1; i>=0 && 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;
}