Submission #1012424

#TimeUsernameProblemLanguageResultExecution timeMemory
1012424UnforgettableplMeetings 2 (JOI21_meetings2)C++17
100 / 100
278 ms68660 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<vector<int>> adj(n+1); for(int i=1;i<n;i++){ int a,b;cin>>a>>b; adj[a].emplace_back(b); adj[b].emplace_back(a); } int centroid = -1; function<int(int,int)> find_centroid = [&](int x,int p){ int siz = 1; for(int&i:adj[x])if(i!=p)siz+=find_centroid(i,x); if(n-siz<=n/2 and siz<=n){ centroid = x; return (int)1e15; } return siz; }; find_centroid(1,0); vector<int> depth(n+1); vector<vector<int>> lift(n+1,vector<int>(18)); vector<pair<int,int>> subsizes; function<int(int,int,int)> dfs = [&](int x,int p,int dep){ int siz = 1; lift[x][0] = p; depth[x] = dep; for(int&i:adj[x])if(i!=p)siz+=dfs(i,x,dep+1); subsizes.emplace_back(siz,x); return siz; }; dfs(centroid,0,1); sort(subsizes.rbegin(),subsizes.rend()); for(int bit=1;bit<18;bit++){ for(int i=1;i<=n;i++){ lift[i][bit] = lift[lift[i][bit-1]][bit-1]; } } auto iter = subsizes.begin()+1; int diaL = centroid; int diaR = centroid; int diaLen = 1; auto lca = [&](int a,int b){ if(depth[a]<depth[b])swap(a,b); int tar = depth[a]-depth[b]; for(int bit=0;bit<18;bit++)if(tar&(1<<bit))a=lift[a][bit]; if(a==b)return a; for(int bit=17;bit>=0;bit--)if(lift[a][bit]!=lift[b][bit]){ a = lift[a][bit]; b = lift[b][bit]; } return lift[a][0]; }; auto dist = [&](int a,int b){ return depth[a]+depth[b]-2*depth[lca(a,b)]+1; }; vector<int> ans(n/2 + 1); for(int i=n/2;i;i--){ while(iter!=subsizes.end() and iter->first>=i){ // Add iter if(dist(iter->second,diaL)>diaLen){ diaR = iter->second; diaLen++; } else if(dist(iter->second,diaR)>diaLen){ diaL = iter->second; diaLen++; } iter++; } ans[i] = diaLen; } for(int i=1;i<=n;i++){ if(i&1)cout<<"1\n"; else cout<<ans[i/2]<<'\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...