Submission #595716

#TimeUsernameProblemLanguageResultExecution timeMemory
595716penguinhackerMeetings 2 (JOI21_meetings2)C++17
4 / 100
4075 ms5472 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ar array const int mxN=2e5; int n, d[mxN], s[mxN], anc[mxN][18], ans[mxN+1], tin[mxN], t; vector<int> adj[mxN]; set<ar<int, 2>> active; void dfs(int u=0) { s[u]=1; tin[u]=t++; for (int i=1; i<18; ++i) anc[u][i]=anc[anc[u][i-1]][i-1]; for (int v : adj[u]) if (v!=anc[u][0]) { d[v]=d[u]+1, anc[v][0]=u; dfs(v); s[u]+=s[v]; } } int lca(int u, int v) { if (d[u]>d[v]) swap(u, v); for (int i=17; ~i; --i) if (d[v]-(1<<i)>=d[u]) v=anc[v][i]; if (u==v) return u; for (int i=17; ~i; --i) if (anc[u][i]!=anc[v][i]) u=anc[u][i], v=anc[v][i]; return anc[u][0]; } int dist(int u, int v) { return d[u]+d[v]-2*d[lca(u, v)]; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i=1; i<n; ++i) { int u, v; cin >> u >> v, --u, --v; adj[u].push_back(v); adj[v].push_back(u); } dfs(); vector<ar<int, 2>> upd; for (int i=1; i<n; ++i) upd.push_back({s[i], i}); sort(upd.begin(), upd.end()); fill(ans, ans+n+1, 1); int best=1; for (int i=n/2; i; --i) { /*while(upd.size()&&upd.back()[0]>=i) { int u=upd.back()[1]; upd.pop_back(); if (n-s[u]>=i) { int v=u; for (int j=17; ~j; --j) if (n-s[anc[v][j]]>=i) v=anc[v][j]; best=max(best, d[u]-d[v]+2); } auto it=active.lower_bound({tin[u]}); if (it!=active.begin()) { --it; int v=(*it)[1]; if (tin[u]+s[u]<=tin[v]+s[v]) active.erase(it); } for (ar<int, 2> x : active) best=max(best, dist(u, x[1])+1); active.insert({tin[u], u}); }*/ for (int j=0; j<n; ++j) { for (int k=j; k<n; ++k) { int u=j, v=k; if (tin[u]>tin[v]) swap(u, v); if (tin[v]+s[v]<=tin[u]+s[u]) { if (s[v]>=i&&n-s[u]>=i) best=max(best, d[v]-d[u]+2); } else { if (s[u]>=i&&s[v]>=i) best=max(best, dist(u, v)+1); } } } ans[2*i]=best; } //cout << active.size() << endl; for (int i=1; i<=n; ++i) cout << ans[i] << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...