#include<bits/stdc++.h>
#define re register int
#define ll long long
#define ull unsigned long long
const int inf=0x3f3f3f3f,maxn=1e6+7;
using namespace std;
int n,depth[maxn];
vector<int> G[maxn];
bool vis[maxn],flag;
ll sum;
int read(){
int ret=0,sgn=0; char ch=getchar();
while(!isdigit(ch)) sgn |= ch == '-', ch = getchar();
while(isdigit(ch)) ret = ret*10 + ch-'0', ch = getchar();
return sgn ? -ret : ret;
}
void dfs(int x,int fa){
depth[x]=depth[fa]+1;
for(int i=0;i<(int)G[x].size();i++){
int to=G[x][i];
if(to==fa) continue;
dfs(to,x);
}
}
void dfs2(int pos,int cur){
if(cur==sum/2){
for(int i=1;i<=n;i++){
if(vis[i]) printf("1 ");
else printf("0 ");
}
flag=true;
return;
}
if(pos==n+1) return;
if(cur>sum/2) return;
if(flag) return;
vis[pos]=1;
dfs2(pos+1,cur+depth[pos]);
vis[pos]=0;
dfs2(pos+1,cur);
}
int main(){
n=read();
for(int i=1;i<=n-1;i++){
int u=read(),v=read();
G[u].push_back(v); G[v].push_back(u);
}
dfs(1,0);
for(int i=1;i<=n;i++){
sum+=depth[i];
}
if(sum%2==1){
printf("-1\n"); return 0;
}
dfs2(1,0);
return 0;
}
思路就是正常记录深度,然后 dfs 枚举 vis 数组,当枚举到总深度除以 2 的时候输出答案。TLE 了几个点,这是 评测记录