Pagini recente » Cod sursa (job #1154742) | Cod sursa (job #2529877) | Cod sursa (job #220248) | Cod sursa (job #2515925) | Cod sursa (job #1701604)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin("mese.in");
ofstream fout("mese.out");
const int dim = 100005;
int n, maxSum;
int old[dim], sum[dim];
vector<int> g[dim];
int sol;
void dfs(int node) {
sum[node] = old[node];
vector<int> v;
for (int adj : g[node]) {
dfs(adj);
v.push_back(sum[adj]);
}
sort(v.begin(), v.end());
int cnt = v.size();
for (int it : v) {
if (sum[node] + it > maxSum)
break;
sum[node] += it;
--cnt;
}
sol += cnt;
}
int main() {
fin >> n >> maxSum;
for (int i = 1; i <= n; ++i) {
int x, y;
fin >> x >> y;
g[x].push_back(i);
old[i] = y;
}
old[0] = maxSum + 1;
dfs(0);
fout << sol << '\n';
return 0;
}
//Trust me, I'm the Doctor!