Cod sursa(job #46418)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 2 aprilie 2007 17:12:19
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

#define nmax 100111
#define sz size()
#define FOR(i,s,d) for(i=(s);i<(d);++i)

int n,S,rad,H[nmax],aux[nmax],sol;
vector <int> G[nmax];

void parc(int i)
{
	int j;
	FOR(j,0,G[i].sz)
		parc(G[i][j]);
	FOR(j,0,G[i].sz)
		aux[j]=H[G[i][j]];
	sort(aux,aux+G[i].sz);
	FOR(j,0,G[i].sz)
	{
		if(H[i]+aux[j]<=S)
			H[i]+=aux[j],sol--;
		else
			break;
	}
}

int main()
{
	int i,j;
	freopen("mese.in","r",stdin);
	freopen("mese.out","w",stdout);
	scanf("%d %d",&n,&S);
	sol=n;
	FOR(i,1,n+1)
	{
		scanf("%d %d",&j,&H[i]);
		if(!j)
			rad=i;
		else
			G[j].push_back(i);
	}
	parc(rad);
	printf("%d\n",sol);
	return 0;
}