dfs记录一下父节点就好了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
int arr[200004];
vector<int>u[200004];
int m=0;
void dfs(int node ,int father)
{
int now=1;
for(int e=0;e<u[node].size();e++)
{
int k=u[node][e];
if(arr[k]==-1)
{
while(now==arr[father]||now==arr[node])
now++;
arr[k]=now++;
m=max(m,now-1);
dfs(k,node,father);
}
}
}
int main()
{
memset(arr,-1,sizeof(arr));
int num;
cin>>num;
for(int i=0;i<num-1;i++)
{
int a,b;
scanf("%d%d",&a,&b);
u[a].push_back(b);
u[b].push_back(a);
}
arr[1]=1;
arr[0]=1;
dfs(1,0);
cout<<m<<endl;
for(int i=1;i<=num;i++)
{
if(i!=1)cout<<" "<<arr[i];
else
cout<<arr[i];
}
return 0;
}