Cod sursa(job #664358)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 19 ianuarie 2012 23:09:29
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;

#define NMAX 100005
#define pb push_back

int sol[NMAX],n;
short int age[NMAX];
short int q[NMAX],vc[NMAX];
int s;
vector<int> v[NMAX];

void dfs(int nod)
{
    	int i,lim=v[nod].size();
    	if(!lim)
    	{
       		sol[nod]=1;
        	vc[nod]=age[nod];
        	return ;
    	}
    	for(i=0;i<lim;i++)
       		dfs(v[nod][i]);
    	for(i=0;i<lim;i++)
    	{
        	q[i+1]=vc[v[nod][i]];
        	sol[nod]+=sol[v[nod][i]];
    	}
    	sort(q+1,q+lim+1);
    	int sum=age[nod];
    	for(i=1;i<=lim;i++)
        	if(sum+q[i]<=s)
            		sum+=q[i];
        	else
           		break;
    	sol[nod]-=(i-2);
    	vc[nod]=sum;
}

int main ()
{
    	int i,start=0,val,tata;

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

    	scanf("%d%d",&n,&s);
	for(i=1;i<=n;i++)
    	{
        	scanf("%d%d",&tata,&val);
		age[i]=val;
        	v[tata].pb(i);
        	if(!tata)
        		start=i;
    	}
    	dfs(start);
    	printf("%d\n",sol[start]);
    	return 0;
}