Pagini recente » Cod sursa (job #922403) | Cod sursa (job #2966156) | Cod sursa (job #806205) | Cod sursa (job #2705022) | Cod sursa (job #63511)
Cod sursa(job #63511)
#include <stdio.h>
#include <vector>
#include <algorithm>
#define nmax 100005
#define pb push_back
using namespace std;
int n,s,i,x1,sef,sol = 1;
int y1,age[nmax];
vector <int> e[nmax];
int dfs(int x) {
int aux = 0,sum = (int)age[x];
vector <int> pp;
for(int i = 0; i < (int)e[x].size(); i++) {
aux = dfs(e[x][i]);
sum += (int)aux;
pp.pb(aux);
}
if(sum > s) {
sort(pp.begin(),pp.end());
while(sum > s) {
sol++;
sum -= pp[pp.size() - 1];
pp.pop_back();
}
}
return sum;
}
int main() {
freopen("mese.in","r",stdin);
freopen("mese.out","w",stdout);
scanf("%d%d",&n,&s);
for(int i = 1; i <= n; i++) {
scanf("%d %d",&x1,&y1);
if(x1 == 0) sef = i;
age[i] = (int)y1;
e[x1].pb(i);
}
dfs(sef);
printf("%d\n",sol);
return 0;
}