Pagini recente » Cod sursa (job #3222749) | Cod sursa (job #1395301) | Cod sursa (job #3275085) | Cod sursa (job #1302529) | Cod sursa (job #1836811)
#include <bits/stdc++.h>
using namespace std;
ifstream in("mese.in");
ofstream out("mese.out");
const int Maxn = 1e5;
int n, s, root, v[Maxn + 1];
vector<int>sons[Maxn + 1];
int sum[Maxn + 1];
vector<int>sons_sums;
void Read() {
in >> n >> s;
for (int i = 1; i <= n; ++i) {
int father;
in >> father >> v[i];
if (!father) {
root = i;
}
else
sons[father].push_back(i);
}
}
void Dfs(int node, int &need) {
sons_sums.clear();
sum[node] = v[node];
for (auto fiu : sons[node]) {
Dfs(fiu, need);
sons_sums.push_back(sum[fiu]);
}
sort(sons_sums.begin(), sons_sums.end());
for (int i = 0; i < (int)sons_sums.size() && sons_sums[i] + sum[node] <= s; ++i)
sum[node] += sons_sums[i], need--;
}
int main() {
Read();
int need = n;
Dfs(root, need);
out << need;
return 0;
}