Cod sursa(job #842130)

Utilizator stoicatheoFlirk Navok stoicatheo Data 26 decembrie 2012 11:46:30
Problema Mese Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

int S, rad , n , i, x, cst[100111];
vector <int> v[100111];


void citire(){

    FILE *f = fopen("mese.in", "r");

    fscanf(f,"%d %d",&n,&S);
    for(i=1; i<=n; i++){
        fscanf(f,"%d %d",&x, &cst[i]);

        if(x) v[x].push_back(i);
        else  rad = i;
    }

    fclose(f);
}


int DFS(int nod){

    int nr = 0;
    vector <int>::iterator it;
    vector <int> sub;

    for(it = v[nod].begin(); it != v[nod].end(); it++){
        nr+=DFS(*it);

        cst[nod]+=cst[*it];
        sub.push_back(cst[*it]);
    }

    sort(sub.begin(), sub.end());

    for( i=sub.size() - 1;  cst[nod] > S && i>=0; i--){
        cst[nod]-=sub[i];
        sub.pop_back();
        nr++;
    }

    return nr;

}

void solve(){

    FILE *g = fopen("mese.out", "w");
    fprintf(g,"%d",DFS(rad) + 1);
    fclose(g);

}

int main(){

    citire();
    solve();

    return 0;
}