zoukankan      html  css  js  c++  java
  • CF741C Arpa’s overnight party and Mehrdad’s silent entering

    CF741C Arpa’s overnight party and Mehrdad’s silent entering

    题目描述

    有2n个人围成一圈坐在桌子边上,每个人占据一个位子,对应这2n个人是n对情侣,要求情侣不能吃同一种食物,并且桌子上相邻的三个人的食物必须有两个人是不同的,只有两种食物(1或者是2),问一种可行分配方式。

    Solution

    显然对于第一个要求给情侣连边

    然后考虑第二个限制,将其转化成2*i 和 2*i+1不同

    二分图染色

    #include<bits/stdc++.h>
    
    using namespace std;
    
    inline int read()
    {
        int f = 1,x = 0;
        char ch;
        do
        {
            ch = getchar();
            if(ch == '-')f = -1;
        }while(ch<'0'||ch>'9');
        do
        {
            x = (x<<3) + (x<<1) + ch - '0';
            ch = getchar();
        }while(ch>='0'&&ch<='9');
        return f*x;
    }
    
    const int MAXN = 200000 + 10;
    
    int n;
    int x[MAXN],y[MAXN];
    vector<int>g[MAXN];
    int col[MAXN];
    
    inline void dfs(int x,int c)
    {
        col[x] = c;
        for(int i=0;i<g[x].size();i++)
        {
            int v = g[x][i];
            if(!col[v]) dfs(v,3-c);
        }
    }
    
    int main()
    {
        n = read();
        for(int i=1;i<=n;i++)
        {
            x[i] = read(),y[i] = read();
            g[x[i]].push_back(y[i]);
            g[y[i]].push_back(x[i]);
        }
        for(int i=1;i<=n;i++)
        {
            g[2*i-1].push_back(2*i);
            g[2*i].push_back(2*i-1);
        }
        for(int i=1;i<=2*n;i++)
        {
            if(!col[i])
            {
                dfs(i,1);
            }
        }
        for(int i=1;i<=n;i++) printf("%d %d
    ",col[x[i]],col[y[i]]);
    }
  • 相关阅读:
    [原]Android 开发第一步
    [转]使用Android-Studio 开发Android 程序
    [转]VS2010 常用插件
    [转]FluentData
    BUUCTF-[HCTF 2018]WarmUp
    2019.11.11读书笔记
    2019.11.9读书笔记
    记录一道神仙CTF-wtf.sh-150
    SDOI2018 一轮培训划水祭
    [SHOI2009]会场预约
  • 原文地址:https://www.cnblogs.com/wlzs1432/p/13821628.html
Copyright © 2011-2022 走看看