Pagini recente » Cod sursa (job #1823573) | Cod sursa (job #2474033) | Cod sursa (job #1886680) | Cod sursa (job #1409532) | Cod sursa (job #1264418)
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
#define ITERATOR vector <int>::iterator
const int NMAX = 100001;
vector <int> graph[NMAX];
int res, smax, age[NMAX];
void dfs (int node) {
vector <int> sums;
ITERATOR it;
for(it = graph[node].begin(); it != graph[node].end(); ++ it) {
dfs(*it);
sums.push_back(age[*it]);
}
sort(sums.begin(), sums.end());
for(it = sums.begin(); it != sums.end(); ++ it) {
if(*it + age[node] > smax) {
res += sums.size() - (it - sums.begin());
break;
}
age[node] += *it;
}
}
int main() {
freopen("mese.in", "r", stdin);
freopen("mese.out", "w", stdout);
int n, i, dad, root;
scanf("%d%d", &n, &smax);
for(i = 1; i <= n; ++ i) {
scanf("%d%d", &dad, &age[i]);
graph[dad].push_back(i);
}
res = 1;
dfs(0);
printf("%d\n", res);
return 0;
}