제출 #1216441

#제출 시각아이디문제언어결과실행 시간메모리
1216441PenguinsAreCuteMeetings 2 (JOI21_meetings2)C++17
20 / 100
4093 ms12872 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<vector<int>> adj(n); vector<int> ans(n+1,1); for(int i=1;i<n;++i) { int u, v; cin >> u >> v; adj[u-1].push_back(v-1); adj[v-1].push_back(u-1); } vector<int> sub(n); auto dfs0 = [&adj,&sub](auto &self, int x, int p) -> int { sub[x] = 1; for(auto i: adj[x]) if(i != p) sub[x] += self(self, i, x); return sub[x]; }; auto dfs1 = [&adj,&sub,&ans,n](auto &self, int x, int p, int t, int h) -> void { ans[min(sub[x], t) * 2] = max(ans[min(sub[x], t) * 2], h); for(auto i: adj[x]) if(i != p) self(self, i, x, t, h + 1); }; auto dfs2 = [&adj,&sub,&dfs1,n](auto &self, int x, int p) -> void { for(auto i: adj[x]) dfs1(dfs1, i, x, n - sub[i], 2); for(auto i: adj[x]) if(i != p) { sub[x] = n - exchange(sub[i], n); self(self, i, x); sub[i] = n - exchange(sub[x], n); } }; dfs0(dfs0, 0, -1); dfs2(dfs2, 0, -1); for(int i=n-1;i--;) ans[i] = max(ans[i], ans[i+2]); for(int i=1;i<=n;i++) cout << ans[i] << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...