Pagini recente » Cod sursa (job #1405047) | Cod sursa (job #1371966) | Cod sursa (job #3178621) | Cod sursa (job #2939495) | Cod sursa (job #1564031)
#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;
}