Cod sursa(job #47886)

Utilizator mariusdrgdragus marius mariusdrg Data 4 aprilie 2007 10:33:42
Problema Mese Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<stdio.h>
#include<vector>
#include<algorithm>

using namespace std;

const int maxn = 100000;

int s, n, i;
int val[maxn],v[maxn];
int j;
vector<int> vect[maxn];
int x, ans;

bool cmp(const int &i, const int &j)
{
        return val[i] > val[j];
}

void dfs(int i)
{
        vector<int> :: iterator it;
        for(it = vect[i].begin();it != vect[i].end(); ++it)
        {
                dfs(*it);
        }
        sort(vect[i].begin(),vect[i].end(),cmp);
        int j = 0;
        val[i] += v[i];
        for(it = vect[i].begin();it != vect[i].end(); ++it)
        {
                if (val[i] + val[*it] > s) break;
                ++j;
                val[i] += val[*it];
        }
        ans += vect[i].size() - j;
}


int main()
{
        freopen("mese.in","r",stdin);
        freopen("mese.out","w",stdout);
        scanf("%d %d",&n,&s);
        int st = 0;
        for(i = 1;i <= n; ++i)
        {
                scanf("%d %d",&x,&v[i]);
                if (x != 0)
                {
                        vect[x].push_back(i);
                }
                if (x == 0)
                {
                        st = i;
                }
        }

        dfs(st);
        printf("%d\n",ans);

        return 0;
}