0分但个人感觉思路清晰 求助
查看原帖
0分但个人感觉思路清晰 求助
667138
Meny__love楼主2023/8/5 19:20

这是代码:

#include<bits/stdc++.h>
using namespace std;
int cnt[1000005];
bool vis[1000005],flag=0;
struct Node{
	int num,deep;
	Node(int x,int y){
		num=x;
		deep=y;
	}
	bool operator < (const Node& a)const{
		return deep>a.deep;
	}
};
priority_queue<Node> q;
int main(){
	int n;
	long long ans=0,num=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++) cnt[i]=1;
	for(int i=2;i<=n;i++){
		int fa,son;
		scanf("%d%d",&fa,&son);
		if(fa<son) cnt[son]=cnt[fa]+1;
		else cnt[fa]=cnt[son]+1;
	}
	for(int i=1;i<=n;i++){
		ans+=cnt[i];
		q.push(Node(i,cnt[i]));
	}
	if(ans%2==1) printf("-1");
	else {
		while(!q.empty()){
			num+=q.top().deep;
			vis[q.top().num]=1;
			q.pop();
			if(num>ans/2) break;
		}
		num-=ans/2;
		for(int i=1;i<=n;i++){
			if(num==0) break;
			if(cnt[i]==num&&vis[i]) {
				vis[i]=0;
				flag=1;
				break;
			}
		}
		for(int i=1;i<=n;i++) {
			if(vis[i]) printf("1 ");
			else printf("0 ");
		}
	}
	return 0;
} 
2023/8/5 19:20
加载中...