求助,为什么不对
查看原帖
求助,为什么不对
791994
liyanchenlycccccc楼主2023/8/7 18:03
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,h[N],to[N],nx[N],idx,d[N],v[N];
long long s=0,s1=0;
void add_edge(int u,int v)
{
  to[++idx]=v;
  nx[idx]=h[u];
  h[u]=idx;
}
void dfs(int u,int pig)
{
  for(int i=h[u]; i; i=nx[i])
  {
    int v=to[i];
    if(v==pig) continue;
    d[v]=d[u]+1;
    dfs(v,u);
  }
}
int main()
{
  scanf("%d",&n);
  for(int i=1; i<=n-1; i++)
  {
    int u,v;
    scanf("%d%d",&u,&v);
    add_edge(u,v);
    add_edge(v,u);
  }
  dfs(1,0);
  for(int i=1; i<=n; i++)
    s+=d[i];
  if(s%2==1)
  {
    printf("-1");
  }
  else
  {
    long long i=0;
    while(s1<=s/2) s1+=d[++i];
    int t=s1-s/2;
    for(int j=1; j<=i; j++)
      if(d[j]!=t)
        v[j]=1;
    for(int i=1; i<=n; i++) printf("%d ",v[i]);
  }
  return 0;
}```
2023/8/7 18:03
加载中...