题目链接:点击打开链接
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; int visit[200010],next[400010],first[400010]; int v[400010],col[200010]; int n,e; void edge(int x,int y) { v[++e]=y; next[e]=first[x]; first[x]=e; } void dfs(int u,int n1,int n2) { int i; visit[u]=1; int co=0; for(i=first[u];i;i=next[i]) { if(!visit[v[i]]) { ++co; while(co==n1||co==n2) ++co; col[v[i]]=co; dfs(v[i],col[u],col[v[i]]); } } } int main() { int i,j,x,y; scanf("%d",&n); for(i=1;i<n;i++) { scanf("%d%d",&x,&y); edge(x,y); edge(y,x); } //memset(first,0,sizeof(first)); //memset(visit,0,sizeof(visit)); col[1]=1; dfs(1,1,-1); int max=0; for(i=1;i<=n;i++) if(max<col[i]) max=col[i]; printf("%d\n",max); for(i=1;i<n;i++) printf("%d ",col[i]); printf("%d\n",col[n]); return 0; }
转载请注明原文地址: https://ju.6miu.com/read-19069.html