Cod sursa(job #1564031)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 7 ianuarie 2016 20:52:52
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#include <algorithm>
#define MAXN 100000
int ans, t, s[MAXN+1], k, lista[MAXN+1], val[MAXN+1], next[MAXN+1], v[MAXN];
inline void adauga(int x, int y){
    k++;
    val[k]=y;
    next[k]=lista[x];
    lista[x]=k;
}
void dfs(int x){
    int p=lista[x];
    while(p){
        dfs(val[p]);
        p=next[p];
    }
    int a=0;
    p=lista[x];
    while(p){
        v[a++]=s[val[p]];
        p=next[p];
    }
    std::sort(v, v+a);
    int i=0;
    while((i<a)&&(s[x]+v[i]<=t)){
        s[x]+=v[i];
        i++;
    }
    ans+=a-i;
}
int main(){
    int n, i, x;
    FILE *fin, *fout;
    fin=fopen("mese.in", "r");
    fout=fopen("mese.out", "w");
    fscanf(fin, "%d%d", &n, &t);
    for(i=1; i<=n; i++){
        fscanf(fin, "%d%d", &x, &s[i]);
        adauga(x, i);
    }
    ans=1;
    dfs(val[lista[0]]);
    fprintf(fout, "%d\n", ans);
    fclose(fin);
    fclose(fout);
    return 0;
}