Cod sursa(job #63511)

Utilizator alextheroTandrau Alexandru alexthero Data 28 mai 2007 23:32:15
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#include <vector>
#include <algorithm>

#define nmax 100005
#define pb push_back

using namespace std;

int n,s,i,x1,sef,sol = 1;
int y1,age[nmax];
vector <int> e[nmax];

int dfs(int x) {
	int aux = 0,sum = (int)age[x];
	vector <int> pp;
	for(int i = 0; i < (int)e[x].size(); i++) {
		aux = dfs(e[x][i]);
		sum += (int)aux;
		pp.pb(aux);
	}
	if(sum > s) {
		sort(pp.begin(),pp.end());
		while(sum > s) {
			sol++;
			sum -= pp[pp.size() - 1];
			pp.pop_back();
		}
	}
	return sum;
}

int main() {
	freopen("mese.in","r",stdin);
	freopen("mese.out","w",stdout);

	scanf("%d%d",&n,&s);
	for(int i = 1; i <= n; i++) {
		scanf("%d %d",&x1,&y1);
		if(x1 == 0) sef = i;
		age[i] = (int)y1;
		e[x1].pb(i);
	}

	dfs(sef);
	printf("%d\n",sol);

	return 0;
}