#include <bits/stdc++.h>
using namespace std;
using ii = pair<int, int>;
const int N = 2e5 + 5;
int n, d, depth[N];
vector<int> ad[N];
priority_queue<ii, vector<ii>, greater<>> pq[N];
void dfs(int u){
for(auto v : ad[u]){
depth[v] = depth[u] + 1;
dfs(v);
if(pq[v].size() > pq[u].size()) swap(pq[u], pq[v]);
while(pq[u].size() && pq[v].size() && pq[u].top().first + pq[v].top().first - 2*depth[u] < d){
if(pq[u].top().first < pq[v].top().first) pq[u].pop();
else pq[v].pop();
}
while(pq[v].size()){
pq[u].push(pq[v].top());
pq[v].pop();
}
}
if(pq[u].empty() || pq[u].top().first - depth[u] >= d) pq[u].push({depth[u], u});
}
int32_t main(){
cin.tie(0)->sync_with_stdio(0);
cin >> n >> d;
for(int i = 2; i <= n; i++){
int p; cin >> p; p += 1;
ad[p].push_back(i);
}
dfs(1);
cout << pq[1].size() << "\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |