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]]);
    }
  • 相关阅读:
    JavaScript OOP 思想
    单页界面和 AJAX 模式
    jQuery 的 ready 函数是如何工作的?
    Dojo系列教程
    谈谈javascript语法里一些难点问题(一)
    2014年总结、2015年的小计划--女生程序员小感想
    Android名词解释
    【JS】defer / async
    关于对defer的理解.
    defer和async的区别
  • 原文地址:https://www.cnblogs.com/wlzs1432/p/13821628.html
Copyright © 2011-2022 走看看