# include <iostream>
# include <vector>
using namespace std;
template<class T> void chmax(T& x, const T& y) {x=max(x,y);}
const int MAX=2e5+11,LOG=20;
int n;
vector<int> adj[MAX];
int out[MAX];
int SZ[MAX];
int H[MAX];
int st[MAX][LOG];
void dfs_lca(int curr, int par)
{
SZ[curr]=1;
for(int nxt: adj[curr])
{
if(nxt==par) continue;
H[nxt]=H[curr]+1;
st[nxt][0]=curr;
dfs_lca(nxt,curr);
SZ[curr]+=SZ[nxt];
}
}
void lca_precalc()
{
dfs_lca(1,0);
for(int j=1;j<LOG;j++)
{
for(int i=1;i<=n;i++)
{
if(H[i]-(1<<j)<0) continue;
st[i][j]=st[st[i][j-1]][j-1];
}
}
}
int lift(int u, int k)
{
for(int j=LOG-1;j>=0;j--)
{
if(k-(1<<j)>=0)
{
u=st[u][j];
k-=(1<<j);
}
}
return u;
}
int get_lca(int u, int v)
{
if(H[u]<H[v]) swap(u,v);
for(int j=LOG-1;j>=0;j--)
{
if(H[u]-(1<<j)>=H[v])
{
u=st[u][j];
}
}
if(u==v) return u;
for(int j=LOG-1;j>=0;j--)
{
if(H[u]-(1<<j)>=0 and st[u][j]!=st[v][j])
{
u=st[u][j];
v=st[v][j];
}
}
return st[u][0];
}
pair<int,int> sizes(int u, int v)
{
int lca=get_lca(u,v);
if(lca!=u and lca!=v) return {SZ[u],SZ[v]};
bool Swap=0;
if(u!=lca)
{
Swap=1;
swap(u,v);
}
pair<int,int> ans;
ans={n-SZ[lift(v,H[v]-H[u]-1)],SZ[v]};
if(Swap) swap(ans.first,ans.second);
return ans;
}
int sz[MAX];
int from[MAX];
int h[MAX];
void dfs(int curr, int par)
{
sz[curr]=1;
for(int nxt: adj[curr])
{
if(nxt==par) continue;
if(from[curr]==0) from[nxt]=nxt;
else from[nxt]=from[curr];
h[nxt]=h[curr]+1;
dfs(nxt,curr);
sz[curr]+=sz[nxt];
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(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);
}
lca_precalc();
for(int i=1;i<=n;i++) out[i]=1;
for(int i=1;i<=n;i++)
{
h[i]=1;
from[i]=0;
dfs(i,0);
for(int u=1;u<=n;u++)
{
if(u==i) continue;
//chmax(out[2*min(sz[u],n-sz[from[u]])],h[u]);
int sz1,sz2;
tie(sz1,sz2)=sizes(u,i);
chmax(out[2*min(sz1,sz2)],h[u]);
}
}
int start=n;
if(start%2==1) start--;
for(int i=start-2;i>=2;i--) out[i]=max(out[i],out[i+2]);
for(int i=1;i<=n;i++) cout<<out[i]<<"\n";
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |