Cod sursa(job #44906)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 31 martie 2007 19:51:49
Problema Mese Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include <vector>

using namespace std;

#define MAXN 30005

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

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];

	for (; nr[k] > S; )
	{
		NR++;
		int MAX = -1, MAXi = -1;
		for (it = con[k].begin(); it != con[k].end(); it++)
			if (nr[*it] > MAX)
				MAX = nr[*it],
				MAXi = *it;
		nr[MAXi] = 0;
		nr[k] -= MAX;
	}
}

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;
}