[ABC303E]

[ABC303E] A Gift From the Stars

每次合并都是合并入度为 \(1\) 的点,所以合并的一定不是中心,且被合并后入度是 \(2\)。因此如果某个节点的入度 \(\ge 3\),那么这个节点一定是中心。对于剩余的点,因为保证有解,直接当作大小为 \(2\) 的星处理。(注意大小为 \(2\) 的星共 \(3\) 个点)。

#include<cstdio>
#include<algorithm>
using namespace std;
#define Ls(i,l,r) for(int i=l;i<r;++i)
#define Rs(i,l,r) for(int i=l;i>r;--i)
#define Le(i,l,r) for(int i=l;i<=r;++i)
#define Re(i,l,r) for(int i=l;i>=r;--i)
#define L(i,l) for(int i=0;i<l;++i)
#define E(i,l) for(int i=1;i<=l;++i)
#define W(t) while(t--)
const int N=200010;
int n,d[N],ans[N],cnt;
int main(){
	#ifndef ONLINE_JUDGE
	freopen("1.in","r",stdin);
	// freopen("1.out","w",stdout);
	// ios::sync_with_stdio(0);
	// cin.tie(0);
	// cout.tie(0);
	#endif
	// Insert Code Here
	scanf("%d",&n);
	E(i, n-1){
		int a,b;
		scanf("%d%d",&a,&b);
		++d[a],++d[b];
	}
	int s=n;
	E(i, n)
		if(d[i]>=3)ans[++cnt]=d[i],s-=d[i]+1;
	E(i, s/3)printf("%d ",2);
	sort(ans+1,ans+1+cnt);
	E(i, cnt)printf("%d ",ans[i]);
	return 0;
}
posted @ 2023-06-03 10:14  wscqwq  阅读(7)  评论(0编辑  收藏  举报