1.深搜遍历一个图 当前+上一个(防止回头)
2.题设未强调不重复,则可以
3.需要顺序则需id
4.auto i 为内容整体
#include<bits/stdc++.h>
using namespace std;
int n,t,xx,yy;
struct edge{
int id,v;
};
vector<edge>a[100005];
int ans[100005];
void dfs(int u,int f,int now)
{
for(auto i:a[u])
{
if(i.v!=f)
{
ans[i.id]=now%2+2;
dfs(i.v,u,++now);
}
}
}
void solve()
{
for(int i=1;i<=n;++i)
if(a[i].size()>2)
{
printf("-1\n");
return ;
}
for(int i=1;i<=n;++i)
{
if(a[i].size()<2)
{
dfs(i,0,0);
break;
}
}
for(int i=1;i<n;++i)
{
printf("%d ",ans[i]);
}
printf("\n");
return ;
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
a[i].clear();
for(int i=1;i<n;++i)
{
scanf("%d%d",&xx,&yy);
a[xx].push_back((edge){i,yy});
a[yy].push_back((edge){i,xx});
}
solve();
}
return 0;
}