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]]);
    }
  • 相关阅读:
    Mysql 之 编码问题
    Mysql Basic
    CentOS 之 Sublime text3 安装
    mapper映射
    端口号占用
    2020系统综合实验 第7次实践作业
    2020系统综合实验 第6次实践作业
    解决github打开速度慢问题
    2020系统综合实践 第5次实践作业
    2020系统综合实验 第4次实践作业
  • 原文地址:https://www.cnblogs.com/wlzs1432/p/13821628.html
Copyright © 2011-2022 走看看