zoukankan      html  css  js  c++  java
  • 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
    ");
                    return 0;
                }
            }
        }
        for(int i=1;i<=n;i++)
            printf("%d %d
    ",ans[B[i]],ans[G[i]]);
    
        return 0;
    }
    Psong
  • 相关阅读:
    记录
    集合
    数据库一键退出脚本
    修改NLS_DATE_FORMAT的四种方式
    触发器
    (转)rlwrap真是一个好东西
    Windows常用技巧集锦
    UTL_FILE
    redis入门(03)redis的配置
    服务网关
  • 原文地址:https://www.cnblogs.com/N-Psong/p/6224374.html
Copyright © 2011-2022 走看看