Submission #1238731

#TimeUsernameProblemLanguageResultExecution timeMemory
1238731damoonMeetings 2 (JOI21_meetings2)C++20
100 / 100
369 ms24496 KiB
#include <bits/stdc++.h> using namespace std; //#pragma GCC optimize("O3,unroll-loops") //main //#pragma GCC target("avx2") //cf... //#pragma GCC target("sse4") //Quera #define ll long long typedef pair<int,int> pii; typedef pair<int,pii> pip; typedef pair<pii,int> ppi; typedef pair<pii,pii> ppp; #define f first #define s second #define lc 2*id #define rc 2*id+1 #define all(x) x.begin(),x.end() #define pb push_back #define pp pop_back #define unicorn(x) x.resize(unique(x.begin(),x.end())-x.begin()) string pr(int* vv,int l,int r){for(int i=l;i<r;i++)cout<<vv[i]<<" ";return "";} string pr( ll* vv,int l,int r){for(int i=l;i<r;i++)cout<<vv[i]<<" ";return "";} string pr(vector<int> vv){for(auto i:vv)cout<<i<<" ";return "";} string pr( vector<ll> vv){for(auto i:vv)cout<<i<<" ";return "";} string pr(pii* vv,int l,int r){for(int i=l;i<r;i++)cout<<"( "<<vv[i].f<<","<<vv[i].s<<" ) ";return "";} string pr(vector<pii> vv){for(auto i:vv)cout<<"( "<<i.f<<","<<i.s<<" ) ";return "";} const int L = 2e5+10,mod = 1e9+7; const int inf = 1e9+10; int n,C; int cnt[L],h[L],a[L],b[L],mx[L]; vector<int> adj[L]; bool mark[L]; void Find(int v,int p,int sz){ cnt[v] = 1; bool ok = 1; for(auto u:adj[v]){ if(!mark[u] and u != p){ Find(u,v,sz); cnt[v] += cnt[u]; ok = ok and (2*cnt[u] <= sz); } } ok = ok and (2*cnt[v] >= sz); if(ok) C = v; } void dfs(int v,int p){ cnt[v] = 1; for(auto u:adj[v]){ if(!mark[u] and u != p){ h[u] = h[v]+1; dfs(u,v); cnt[v] += cnt[u]; } } b[cnt[v]] = max(b[cnt[v]],h[v]); } void solve(int v,int sz){ if(sz == 1) return; Find(v,0,sz); mark[C] = 1; //cout<<"C: "<<C<<endl; for(int i=1;i<=sz;i++){ a[i] = b[i] = 0; } for(auto u:adj[C]){ if(mark[u]) continue; h[u] = 1; dfs(u,C); for(int i=cnt[u]-1;i>=1;i--){ b[i] = max(b[i],b[i+1]); } //cout<<"dfs: "<<u<<" --> "<<pr(b,1,cnt[u]+1)<<endl; for(int i=1;i<=cnt[u];i++){ mx[i] = max(mx[i],b[i]+a[i]); a[i] = max(a[i],b[i]); b[i] = 0; } } //cout<<"----------------------------"<<endl; for(auto u:adj[C]){ if(!mark[u]){ solve(u,cnt[u]); } } } int main(){ //ofstream cout ("out.out"); //ifstream cin ("in.in"); ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n; for(int i=1;i<n;i++){ int u,v; cin>>u>>v; adj[u].pb(v); adj[v].pb(u); } solve(1,n); for(int i=n/2;i>=1;i--){ mx[i] = max(mx[i+1],mx[i]+1); } for(int i=1;i<=n;i++){ if(i%2) cout<<1<<endl; else cout<<mx[i/2]<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...