제출 #1167039

#제출 시각아이디문제언어결과실행 시간메모리
1167039ezzzayCat in a tree (BOI17_catinatree)C++17
0 / 100
101 ms209216 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...