#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ff first
#define ss second
#define pb push_back
const int N=3e5+5;
int a[N];
vector<int>v[N];
int d;
deque<int>dp[N];
void dfs(int a){
dp[a].push_front(1);
int sz=0;
int x=0;
for(auto b:v[a]){
dfs(b);
dp[b].push_front(dp[b][0]);
if(dp[b].size()>dp[a].size())swap(dp[a],dp[b]);
for(int i=0;i<dp[b].size();i++){
int p=max(i, d-i);
int x=dp[a][i],y=dp[a][i];
if(dp[b].size()>p){
x=max({x,dp[a][i]+dp[b][p]});
}
if(dp[a].size()>p){
y=max({y,dp[a][p]+dp[b][i]});
}
dp[a][i]=max(x,y);
}
for(int i=dp[b].size()-1;i>=0;i--){
if(i+1<dp[a].size()){
dp[a][i]+=dp[a][i+1];
}
}
}
}
signed main(){
int n;
cin>>n>>d;
for(int i=2;i<=n;i++){
cin>>a[i];
v[++a[i]].pb(i);
}
dfs(1);
int ans=0;
cout<<dp[1][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... |