Pagini recente » Cod sursa (job #3176712) | Cod sursa (job #2116106) | Cod sursa (job #2959126) | Cod sursa (job #755674) | Cod sursa (job #63508)
Cod sursa(job #63508)
#include <stdio.h>
#include <algorithm>
#include <vector>
#define pb push_back
#define nmax 100005
#define smax 30005
using namespace std;
vector <int> e[nmax],pp;
int v[nmax],dad[nmax],s1[nmax],n,sol = 1,s,tata[nmax],scos[nmax],age[nmax],sef;
void dfs(int x) {
v[x] = 1;
s1[x] = age[x];
for(int i = 0; i < (int)e[x].size(); i++)
if(!v[e[x][i]]) {
dad[e[x][i]] = x;
dfs(e[x][i]);
s1[x] += s1[e[x][i]];
pp.pb(s1[e[x][i]]);
}
pp.clear();
for(int i = 0; i < (int)e[x].size(); i++)
if(dad[e[x][i]] == x) pp.pb(s1[e[x][i]]);
if(s1[x] > s) {
sort(pp.begin(),pp.end());
while(s1[x] > s) {
s1[x] -= pp[pp.size() - 1];
sol++;
pp.pop_back();
}
}
}
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",&tata[i],&age[i]);
if(tata[i] != 0) {
e[tata[i]].pb(i);
e[i].pb(tata[i]);
}
else sef = i;
}
dfs(1);
printf("%d\n",sol);
return 0;
}