求助
查看原帖
求助
547787
__Refine__楼主2024/8/25 10:21

样例能过,但WA了,代码如下:

#include<bits/stdc++.h>

using namespace std;

struct bian
{
	int nxt,to;
}b[100001];
int dian[100001],tot;
int co[100001],bla[100001],b1,whi[100001],w1;
int t,n;
void add(int x,int y)
{
	b[++tot].nxt=dian[x];
	b[tot].to=y;
	dian[x]=tot;
}
void dfs(int x,int dis,int fa)
{
	if(dis%2==0) 
	{
		whi[x]++;
		w1++;
	}
	else
	{
		bla[x]++;
		b1++;
	}
	for(int i=dian[x];i;i=b[i].nxt)
	{
		if(b[i].to==fa) continue;
		dfs(b[i].to,dis+1,x);
	}
}
int main()
{
	cin>>t;
	while(t--)
	{
		scanf("%d",&n);
		memset(co,0,sizeof(co));
		memset(dian,0,sizeof(dian));
		tot=0;
		memset(whi,0,sizeof(whi));
		memset(bla,0,sizeof(bla));
		w1=0;
		b1=0;
		for(int i=1;i<n;i++)
		{
			int xx,yy;
			scanf("%d%d",&xx,&yy);
			add(xx,yy);
			add(yy,xx);
		}
		dfs(1,0,0);
		if(abs(w1-b1)>1)
		{
			cout<<-1<<endl;
		 }
		else if(w1>b1||w1==b1)
		{
			int ll1=1,ll2=1;
			for(int i=1;i<=n;i++)
			{
				if(i%2==0)
				{
					while(bla[ll2]==0) ll2++;
					cout<<ll2<<" ";
					ll2++;
				}
				else
				{
					while(whi[ll1]==0) ll1++;
					cout<<ll1<<" ";
					ll1++;
				}
			}
		}
		else
		{
			int ll1=1,ll2=1;
			for(int i=1;i<=n;i++)
			{
				if(i%2!=0)
				{
					while(bla[ll2]==0) ll2++;
					cout<<ll2<<" ";
					ll2++;
				}
				else
				{
					while(whi[ll1]==0) ll1++;
					cout<<ll1<<" ";
					ll1++;
				}
			}
		}
		cout<<endl;
	}
	
  return 0;
 }
2024/8/25 10:21
加载中...