Cod sursa(job #142390)

Utilizator sealTudose Vlad seal Data 24 februarie 2008 15:48:14
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
using namespace std;
#include<cstdio>
#include<vector>
#include<algorithm>
#define Nm 100001
int A[Nm],B[Nm],S[Nm],V[Nm],n,s,r,i,k;
vector<int> G[Nm];

void read()
{
    int i,t;

    freopen("mese.in","r",stdin);
    scanf("%d%d",&n,&s);
    for(i=1;i<=n;++i)
    {
        scanf("%d%d",&t,S+i);
        if(!t)
            r=i;
        else
            G[t].push_back(i);
    }
}

void DFS(int x)
{
    vector<int>::iterator it;

    A[x]=1;
    for(it=G[x].begin();it!=G[x].end();++it)
    {
        DFS(*it);
        A[x]+=A[*it];
    }

    k=0;
    for(it=G[x].begin();it!=G[x].end();++it)
        V[k++]=B[*it];

    sort(V,V+k); B[x]=S[x];
    for(i=0;i<k;++i)
        if(B[x]+V[i]<=s)
            --A[x], B[x]+=V[i];
}

void write()
{
    freopen("mese.out","w",stdout);
    printf("%d\n",A[r]);
}

int main()
{
    read();
    DFS(r);
    write();
    return 0;
}