Pagini recente » Cod sursa (job #850470) | Cod sursa (job #149896) | Cod sursa (job #2859081) | Cod sursa (job #2942454) | Cod sursa (job #1701607)
#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;
short old[dim], sum[dim], v[dim];
vector<int> g[dim];
int sol, k;
void dfs(int node) {
sum[node] = old[node];
for (int adj : g[node])
dfs(adj);
k = 0;
for (int adj : g[node])
v[++k] = sum[adj];
sort(v + 1, v + k + 1);
int cnt = k;
for (int i = 1; i <= k; ++i) {
if (sum[node] + v[i] > maxSum)
break;
sum[node] += v[i];
--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!