제출 #971523

#제출 시각아이디문제언어결과실행 시간메모리
971523_shr104Meetings 2 (JOI21_meetings2)C++14
100 / 100
325 ms28360 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef long double ld; #define pb push_back #define pf push_front #define fi first #define se second const ll mod = 1e9+7, mxn = 2e5+7; ll sz[mxn], max_h[mxn], old_max_h[mxn], n, h[mxn], ans[mxn]; bool del[mxn]; vector<vector<ll>> g(mxn); void dfs_sz(ll u, ll v) {sz[u] = 1; for (ll i : g[u]) {if (i != v && !del[i]) {dfs_sz(i,u); sz[u] += sz[i];}}} ll dfs_ctr(ll u, ll v, ll szx) {for (ll i : g[u]) {if (i != v && !del[i] && sz[i] > szx/2) {return dfs_ctr(i,u,szx);}} return u;} void dfs_mx(ll u, ll v) { sz[u] = 1; for (ll i : g[u]) {if (i != v && !del[i]) {h[i] = h[u]+1; dfs_mx(i,u); sz[u] += sz[i];}} max_h[sz[u]] = max(max_h[sz[u]],h[u]); } void solve(ll u) { dfs_sz(u,u); u = dfs_ctr(u,u,sz[u]); h[u] = 1; ll reset_bound = 0; for (ll i : g[u]) { if (!del[i]) { h[i] = 2; dfs_mx(i,u); reset_bound = max(reset_bound,sz[i]); for (ll j = sz[i]; j >= 0; j--) max_h[j] = max(max_h[j],max_h[j+1]); for (ll j = sz[i]; j >= 0; j--) { ans[j<<1] = max(ans[j<<1],max_h[j]+max(old_max_h[j],1LL)-1); old_max_h[j] = max(old_max_h[j],max_h[j]); max_h[j] = 0; } } } for (ll i = reset_bound; i >= 0; i--) old_max_h[i] = max_h[i] = 0; del[u] = 1; for (ll i : g[u]) {if (!del[i]) {solve(i);}} } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("test.inp","r",stdin); freopen("test.out","w",stdout); freopen("test.err","w",stderr); cin >> n; for (ll i = 1; i < n; i++) { ll a, b; cin >> a >> b; g[a].pb(b); g[b].pb(a); } solve(1); for (ll i = 1; i <= n; i++) cout << max(ans[i],1LL) << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...