Cod sursa(job #47882)

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

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;

int dfs(int i)
{
        vector<int> :: iterator it;
        for(it = vect[i].begin();it != vect[i].end(); ++it)
        {
                dfs(*it);
        }
        for(it = vect[i].begin();it != vect[i].end(); ++it)
        {
                val[i] += val[*it];
        }
        val[i] += v[i];
        if (val[i] > s)
        {
                val[i] = v[i];
                ans += vect[i].size();
        }
}


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