Cod sursa(job #983806)

Utilizator misinozzz zzz misino Data 12 august 2013 18:42:57
Problema Mese Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<cstdio>
#include<vector>
using namespace std;
int i,n,s,x,rez;
int v[100009];
struct nod{
    int x;
    nod *fiu;
    };
nod *l[100002];
//vector<int>l[100010];
void dfs(int x)
{
    nod *it=l[x];
    while(it)
    {
        dfs(it->x);
        v[x]+=v[it->x];
        it=it->fiu;
    }
    while(v[x]>s)
    {
        ++rez;
        int vmax=-1,itmax;
        it=l[x];
        while(it)
        {
            if(v[it->x]>vmax)
            vmax=v[it->x],itmax=it->x;
            it=it->fiu;
        }
        v[x]-=vmax;
        v[itmax]=0;
    }
}
void insereaza(int x,int y)
{
    nod *n=new nod;
    n->x=y;
    n->fiu=l[x];
    l[x]=n;
}
int main()
{
    freopen("mese.in","r",stdin);
    freopen("mese.out","w",stdout);
    scanf("%d%d",&n,&s);
    for(i=1;i<=n;++i)
    {
        scanf("%d%d",&x,&v[i]);
        insereaza(x,i);
//        l[x].push_back(i);
    }
    dfs(0);
    printf("%d\n",rez+1);
    return 0;
}