CodeForces 741C(二分图)

Posted Psong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces 741C(二分图)相关的知识,希望对你有一定的参考价值。

CodeForces 741C Arpa’s overnight party and Mehrdad’s silent entering

题意:n对情侣坐在一个圆桌上吃东西,已知他们的位置。有两种菜,要求每对情侣不能吃同一种菜,每相邻的三个人不能吃同一种菜,给出要求下的分配。

思路:对于情侣之间连线,2*i和2*i-1之间连线,两两相连即是两者吃不同的菜,连线方法的后者保证了相邻三个不能相等。这时图中不会包含奇圈(二分图中一定不含奇圈),所以一定能够构成二分图,这时直接dfs处理就好。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n;
int B[200005];
int G[200005];
int ans[200005];
vector<int> g[200005];
bool dfs(int x){
    for(int i=0;i<g[x].size();i++){
        int v=g[x][i];
        if(ans[v]==ans[x]) return false;
        if(ans[v]==0){
            ans[v]=3-ans[x];
            if(!dfs(v))
                return false;
        }
    }
    return true;
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        B[i]=x; G[i]=y;
        g[x].push_back(y);
        g[y].push_back(x);
        g[2*i-1].push_back(2*i);
        g[2*i].push_back(2*i-1);
    }
    memset(ans,0,sizeof(ans));
    for(int i=1;i<=2*n;i++){
        if(!ans[i]){
            ans[i]=1;
            if(!dfs(i)){
                printf("-1\\n");
                return 0;
            }
        }
    }
    for(int i=1;i<=n;i++)
        printf("%d %d\\n",ans[B[i]],ans[G[i]]);

    return 0;
}
Psong

 

以上是关于CodeForces 741C(二分图)的主要内容,如果未能解决你的问题,请参考以下文章

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

codeforces CF85E Guard Towers 二分答案 二分图判定

Codeforces 1009G Allowed Letters FMT,二分图,二分图匹配,霍尔定理

Codeforces Round #383 (Div. 1) C(二分图)

codeforces 1269D. Domino for Young (二分图证明/结论题)

Bipartite Segments CodeForces - 901C (区间二分图计数)