제출 #1165997

#제출 시각아이디문제언어결과실행 시간메모리
1165997ezzzayCat 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); 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]}); } } 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...