Submission #595691

#TimeUsernameProblemLanguageResultExecution timeMemory
595691czhang2718Meetings 2 (JOI21_meetings2)C++17
20 / 100
4049 ms16344 KiB
#include "bits/stdc++.h" using namespace std; const int N=2e5+1; int n; vector<int> adj[N]; bool vis[N]; int sz[N]; int ans[N]; int dist[N]; int root[N]; void dfs(int x){ vis[x]=1; sz[x]=1; for(int k:adj[x]){ if(!vis[k]){ dist[k]=dist[x]+1; root[k]=(root[x]?root[x]:k); dfs(k); sz[x]+=sz[k]; } } } void ckmx(int &a, int b){ a=max(a,b); } int main(){ cin.tie(0)->sync_with_stdio(0); cin >> n; for(int i=1; i<n; i++){ int u,v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++) vis[j]=0; dist[i]=root[i]=0; dfs(i); for(int j=1; j<=n; j++){ if(j==i) continue; ckmx(ans[2*min(sz[j], n-sz[root[j]])], dist[j]); } } for(int i=n; i>=1; i--) ans[i]=max(ans[i], ans[i+2]); for(int i=1; i<=n; i++){ if(i&1) cout << "1\n"; else cout << ans[i]+1 << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...