Cod sursa(job #961118)

Utilizator primulDarie Sergiu primul Data 11 iunie 2013 17:16:56
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
#include <vector>
 
using namespace std;
 
#define MAXN 100005
 
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;
}