• 【CodeForces


    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;
    }
  • 相关阅读:
    【HDU 4305】Lightning(生成树计数)
    【HDU 1150】Machine Schedule(二分图匹配)
    【HDU 2063】过山车(二分图匹配)
    透过Nim游戏浅谈博弈
    [SCOI2010]字符串
    [SCOI2010]传送带[三分]
    [SCOI2010]序列操作[分块or线段树]
    HDU 5306 Gorgeous Sequence[线段树区间最值操作]
    1455: 罗马游戏[左偏树or可并堆]
    Codevs 5914 [SXOI2016]最大值
  • 原文地址:https://www.cnblogs.com/sky-stars/p/11235214.html
Copyright © 2020-2023  润新知