【CodeForces - 357B】Flag Day(水题)

Flag Day

Descriptions

小G请你对 n 个点进行染色,可选的颜色有三种:白、红、蓝,并使得给定的 m 个三元组中,每个点的颜色各不相同。

因为你可能不会三分图匹配,于是小G给出了更多的特殊条件:

  1. 每个点在三元组中至少出现一次,至多出现两次。
  2. 第 i 个(i ≥ 2)三元组中,至多有一个点在第 1 个到第 i-1 个三元组中出现过。

虽然这题现在已经很水了,但是小G为了照顾萌新,你只要输出其中任意一种方案即可。

Input

输入格式如下:
n m
a1 b1 c1
a2 b2 c2

am bm cm

其中, ai,bi,ci 表示一个三元组,其中的元素为第 ai,bi,ci 个点。

Output

输出格式如下:
c1 c2 … cn

其中, ci 表示第 i 个点的颜色, 1 表示白色, 2 表示红色, 3 表示蓝色。

Examples

Input
7 3
1 2 3
1 4 5
4 6 7
Output
1 2 3 3 2 2 1 
Input
9 3
3 6 9
2 5 8
1 4 7
Output
1 1 1 2 2 2 3 3 3 
Input
5 2
4 1 5
3 1 2
Output
2 3 1 1 3 
题目链接
 
题意 
同一行三个数字代表编号,例  

5 2
4 1 5
3 1 2

4号 1号 5号

3号 1号 2号

最后输出结果 1号 2号 3号 4号 5号

   分别为 2   3  1   1     3

4号 1号 5号

3号 1号 2号

分别对应 1 2 3

     1 2 3

即每一行都是这三个数字 不能重复,不能缺少

 

AC代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#define Mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x,y) memset(x,y,sizeof(x))
#define Maxn 100005
using namespace std;
int n,m;
int color[Maxn];
int a[3];
int main()
{
    cin>>n>>m;
    MEM(color,0);
    for(int i=0; i<m; i++)
    {
        cin>>a[0]>>a[1]>>a[2];
        if(i==0)
        {
            color[a[0]]=1;
            color[a[1]]=2;
            color[a[2]]=3;
        }
        else
        {
            if(color[a[0]]!=0)
            {
                color[a[1]]=(color[a[0]]+1);
                color[a[2]]=(color[a[0]]+2);
                if(color[a[1]]>3)
                    color[a[1]]-=3;
                if(color[a[2]]>3)
                    color[a[2]]-=3;
            }
            else if(color[a[1]]!=0)
            {
                color[a[0]]=(color[a[1]]+1);
                color[a[2]]=(color[a[1]]+2);
                if(color[a[0]]>3)
                    color[a[0]]-=3;
                if(color[a[2]]>3)
                    color[a[2]]-=3;
            }
            else if(color[a[2]]!=0)
            {
                color[a[0]]=(color[a[2]]+1);
                color[a[1]]=(color[a[2]]+2);
                if(color[a[0]]>3)
                    color[a[0]]-=3;
                if(color[a[1]]>3)
                    color[a[1]]-=3;
            }
            else
            {
                color[a[0]]=1;
                color[a[1]]=2;
                color[a[2]]=3;
            }
        }
    }
    for(int i=1;i<=n;i++)
        cout<<color[i]<<" ";
    return 0;
}

 

posted on 2019-07-23 23:30  Sky丨Star  阅读(265)  评论(0编辑  收藏  举报

导航