Submission #1165993

#TimeUsernameProblemLanguageResultExecution timeMemory
1165993ezzzayCat in a tree (BOI17_catinatree)C++17
0 / 100
101 ms209376 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);
            if(dp[b].size()>p){
                dp[a][i]=max({dp[a][i],dp[a][i]+dp[b][p]});
            }
            if(dp[a].size()>p){
                dp[a][i]=max({dp[a][i],dp[a][p]+dp[b][i]});
            }
        }
    }
}
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][1];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...