Cod sursa(job #44911)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 31 martie 2007 19:54:03
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

#define MAXN 100005

int N, S;
vector< int > con[MAXN];
int v[MAXN], nr[MAXN];
int NR = 0;

int cmp(int a, int b) { return nr[a] > nr[b]; }

void dfs( int k )
{
	vector<int> :: iterator it;
	for (it = con[k].begin(); it != con[k].end(); it++)
		dfs(*it),
		nr[k] += nr[*it];

	nr[k] += v[k];

	if (nr[k] > S)
	{
		sort( con[k].begin(), con[k].end(), cmp );

		for (it = con[k].begin(); nr[k] > S; it++)
		{
			NR++;
			nr[k] -= nr[*it];
			nr[*it] = 0;
		}
	}
}

int main()
{
	freopen("mese.in", "rt", stdin);
	freopen("mese.out", "wt", stdout);
	
	scanf("%d %d", &N, &S);

	for (int i = 1; i <= N; i++)
	{
		int p;
		scanf("%d %d", &p, v + i);
		con[p].push_back(i);
	}

	dfs(0);
	printf("%d\n", ++NR);

	return 0;
}