#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
const int mxN = 2e5 + 10;
pair<int, int> dp[mxN];
vector<int> adj[mxN];
int n, d;
void dfs(int u = 0){
vector<int> v;
int tot = 0, dist = 1e9;
for(auto it : adj[u]){
dfs(it);
tot += dp[it].fi;
v.push_back(dp[it].se + 1);
}
sort(v.begin(), v.end());
if(!v.size()){
dp[u].fi = 1, dp[u].se = 0;
}else{
dist = v[0];
for(int i = 1; i < v.size(); ++i){
if(v[i] + dist < d){
--tot, dist = v[i];
}
}
if(dist >= d) dp[u].fi = ++tot, dp[u].se = 0;
else dp[u].fi = tot, dp[u].se = dist;
}
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(nullptr); cout.tie(nullptr);
cin >> n >> d;
for(int i = 1, p; i < n; ++i){
cin >> p;
adj[p].push_back(i);
}
dfs();
cout << dp[0].fi << "\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... |