This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//もう布団の中から出たくない
//布団の外は寒すぎるから
//布団の中から出たくない
//布団の中はあたたかすぎるから
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define ii pair<ll,ll>
#define iii pair<ii,ll>
#define fi first
#define se second
#define endl '\n'
#define debug(x) cout << #x << ": " << x << endl
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define lb lower_bound
#define ub upper_bound
#define rep(x,start,end) for(int x=(start)-((start)>(end));x!=(end)-((start)>(end));((start)<(end)?x++:x--))
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
mt19937 rng(chrono::system_clock::now().time_since_epoch().count());
const int INF=1e18;
struct dat{
	int a=-INF,b=-INF,c=-INF;
	int ab=-INF,bc=-INF;
	int abc=-INF;
	
	dat(){}
	dat(int v){
		a=v,b=-2*v,c=v;
		ab=-v,bc=-v;
		abc=0;
	}
};
dat merge(dat i,dat j){
	dat res;
	res.a=max(i.a,j.a);
	res.b=max(i.b,j.b);
	res.c=max(i.c,j.c);
	res.ab=max({i.ab,j.ab,i.a+j.b});
	res.bc=max({i.bc,j.bc,i.b+j.c});
	res.abc=max({i.abc,j.abc,i.ab+j.c,i.a+j.bc});
	return res;
}
struct node{
	int s,e,m;
	dat val;
	node *l,*r;
	
	node (int _s,int _e){
		s=_s,e=_e,m=s+e>>1;
		
		if (s!=e){
			l=new node(s,m);
			r=new node(m+1,e);
		}
	}
	
	void update(int i,int k){
		if (s==e) val=dat(k);
		else{
			if (i<=m) l->update(i,k);
			else r->update(i,k);
			val=merge(l->val,r->val);
		}
	}
} *root=new node(0,400005);
int n;
vector<int> al[200005];
int d[200005];
int ss[200005];
int small[200005];
vector<int> pos[200005];
int IDX=1;
void dfs(int i,int p){
	ss[i]=1;
	small[i]=1e9;
	pos[i].pub(IDX++);
	
	for (auto it:al[i]){
		if (it==p) continue;
		
		d[it]=d[i]+1;
		dfs(it,i);
		ss[i]+=ss[it];
		small[i]=min(small[i],n-ss[it]);
		pos[i].pub(IDX++);
	}
	small[i]=min(small[i],ss[i]);
}
int ans[200005];
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin.exceptions(ios::badbit | ios::failbit);
	
	cin>>n;
	
	int a,b;
	rep(x,1,n){
		cin>>a>>b;
		al[a].pub(b);
		al[b].pub(a);
	}
	
	dfs(1,-1);
	
	//rep(x,1,n+1) cout<<small[x]<<" "; cout<<endl;
	
	vector<int> idx;
	rep(x,1,n+1) idx.pub(x);
	sort(all(idx),[](int i,int j){
		return small[i]<small[j];
	});
	
	rep(x,1,n+1) ans[x]=1;
	rep(x,n/2+1,1){
		while (!idx.empty() && x<=small[idx.back()]){
			int u=idx.back(); idx.pob();
			for (auto it:pos[u]) root->update(it,d[u]);
		}
		
		ans[2*x]=root->val.abc+1;
	}
	rep(x,1,n+1) cout<<ans[x]<<endl;
}
Compilation message (stderr)
meetings2.cpp: In constructor 'node::node(long long int, long long int)':
meetings2.cpp:63:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   63 |   s=_s,e=_e,m=s+e>>1;
      |               ~^~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |