C. Andryusha and Colored Balloons

来源:互联网 发布:京东众包软件打不开 编辑:程序博客网 时间:2024/06/05 18:18

题意:对于n个顶点,n-1条边的图形,给n个点染色,每连续的3点的颜色不相同,求需要最小颜色数量,并给出染色情况。

最小颜色数量其实,为 min(点的度+1)。对于某点i染色来说,记录i前的颜色,i的颜色,i相邻的点的颜色和前两者不相同。

#include<bits\stdc++.h>using namespace std;vector<int> G[200005];int col[200005],par[200005];int main(){    int n;scanf("%d",&n);    for(int i=1;i<n;i++)    {        int x,y;scanf("%d%d",&x,&y);        G[x].push_back(y);        G[y].push_back(x);    }    queue<int> Q;    col[1]=1;    par[1]=1;    Q.push(1);    int  k = -1;    while(!Q.empty())    {        int node = Q.front();        Q.pop();        int num = 1;        for(int i=0;i<G[node].size();i++)        {            if(!col[ G[node][i] ])            {              if(col[node] == num || col[ par[node] ] == num) num++;              if(col[node] == num || col[ par[node] ] == num) num++;                col[ G[node][i] ] = num;               k = max(k,num);                 par[ G[node][i] ] = node;                 num++;                      Q.push(G[node][i]);            }         }    }    printf("%d\n",k);    for(int i=1;i<=n;i++)    {        printf("%d ",col[i]);    }    printf("\n");    return 0;} 
0 0
原创粉丝点击