这是代码:
#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;
}