Submission #1187149

#TimeUsernameProblemLanguageResultExecution timeMemory
1187149KhoaDuyMeetings 2 (JOI21_meetings2)C++17
0 / 100
3 ms4932 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' const int MAXN=2*1e5; int ans[MAXN+1],sz[MAXN+1],suf[MAXN+1],bst[MAXN+1]; bool del[MAXN+1]; vector<vector<int>> graph(MAXN+1); void setup(int u,int p){ sz[u]=1; for(int v:graph[u]){ if(v!=p&&!del[v]){ setup(v,u); sz[u]+=sz[v]; } } } int getcen(int u,int p,int n){ for(int v:graph[u]){ if(v!=p&&!del[v]&&2*sz[v]>n){ return getcen(v,u,n); } } return u; } void DFS(int u,int p,int depth){ ans[2*sz[u]]=max(ans[2*sz[u]],depth+1); bst[sz[u]]=max(bst[sz[u]],depth); for(int v:graph[u]){ if(v!=p&&!del[v]){ DFS(v,u,depth+1); } } } void decom(int u){ setup(u,-1); u=getcen(u,-1,sz[u]); setup(u,-1); for(int v:graph[u]){ if(!del[v]){ DFS(v,u,1); for(int i=1;i<=sz[v];i++){ ans[2*i]=max(ans[2*i],bst[i]+suf[i]+1); } int curr=-1e9; for(int i=sz[v];i>=1;i--){ curr=max(curr,bst[i]); bst[i]=-1e9; suf[i]=max(suf[i],curr); } } } for(int i=1;i<=sz[u];i++){ suf[i]=-1e9; } for(int br=graph[u].size()-1;br>=0;br--){ int v=graph[u][br]; if(!del[v]){ DFS(v,u,1); for(int i=1;i<=sz[v];i++){ ans[2*i]=max(ans[2*i],bst[i]+suf[i]+1); } int curr=-1e9; for(int i=sz[v];i>=1;i--){ curr=max(curr,bst[i]); bst[i]=-1e9; suf[i]=max(suf[i],curr); } } } for(int i=1;i<=sz[u];i++){ suf[i]=-1e9; } del[u]=true; for(int v:graph[u]){ if(!del[v]){ decom(v); } } } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; for(int i=1;i<=n;i++){ ans[i]=1,bst[i]=-1e9,suf[i]=-1e9; } for(int i=0;i<n-1;i++){ int a,b; cin >> a >> b; graph[a].push_back(b); graph[b].push_back(a); } decom(1); for(int i=n-1;i>=1;i--){ ans[i]=max(ans[i],ans[i+1]); } for(int i=1;i<=n;i++){ cout << ans[i] << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...