제출 #1165998

#제출 시각아이디문제언어결과실행 시간메모리
1165998ezzzayCat in a tree (BOI17_catinatree)C++17
100 / 100
316 ms334852 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]=max(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...