【贪心】【DFS】Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) C. Andryusha and Colored Balloons

从任意点出发,贪心染色即可。

#include<cstdio>
#include<algorithm>
using namespace std;
int v[200010<<1],next[200010<<1],first[200010],e;
void AddEdge(int U,int V)
{
	v[++e]=V;
	next[e]=first[U];
	first[U]=e;
}
bool vis[200010];
int n,col[200010];
void dfs(int U,int n1,int n2)
{
	vis[U]=1;
	int co=0;
	for(int i=first[U];i;i=next[i])
	  if(!vis[v[i]])
	    {
	      ++co;
	      while(co==n1 || co==n2)
	        ++co;
	      col[v[i]]=co;
	      dfs(v[i],col[U],col[v[i]]);
	    }
}
int main()
{
//	freopen("c.in","r",stdin);
	int x,y;
	scanf("%d",&n);
	for(int i=1;i<n;++i)
	  {
	  	scanf("%d%d",&x,&y);
	  	AddEdge(x,y);
	  	AddEdge(y,x);
	  }
	col[1]=1;
	dfs(1,1,-1);
	printf("%d
",*max_element(col+1,col+n+1));
	for(int i=1;i<n;++i)
	  printf("%d ",col[i]);
	printf("%d
",col[n]);
	return 0;
}
原文地址:https://www.cnblogs.com/autsky-jadek/p/6507601.html