二分图一?二分图判定

萌萌哒的传送门

题目讲的是如何在一堆相亲的名单中找出有错误的地方,如两个同性的被安排相亲;

因为相亲的两个人必定是异性,所以题目可以转化为黑白染色问题.

何为黑白染色问题......................

在一个无向图中,对图中所有的顶点染黑白俩色,并且要求共边的两个端点的颜色不能相同.

所以很容易想到直接dfs,对每一个还未染色的顶点进行染色,如果发现当前无法染成所需的,

则退出搜索.否则继续,注意图有可能不联通.

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <vector>
#include <cstdlib>
#include <algorithm>

#define ls u << 1
#define rs u << 1 | 1
#define lson l, mid, u << 1
#define rson mid + 1, r, u << 1 | 1
#define INF 0x3f3f3f3f

using namespace std;
typedef long long ll;
const int M = 1e4 + 100;
const int mod = 2147483647;
int c[M];
vector<int>G[M];

bool dfs(int u) {
    for(int i = 0; i < G[u].size(); i++) {
        int co = G[u][i];
        if(c[co] == -1) {
            c[co] = c[u] ^ 1;
            if(!dfs(co)) return false;
        } else {
            if(c[co] == c[u]) return false;
        }
    }
    return true;
}

int main() {
    int T,n,m;
    cin>>T;
    while(T--) {
        scanf("%d %d",&n,&m);
        memset(c,-1,sizeof(c));
        while(m--) {
            int a,b;
            scanf("%d %d",&a,&b);
            G[a].push_back(b);
            G[b].push_back(a);
        }
        bool isGO = true;
        for(int i = 1; i <= n && isGO; i++) {
            if(c[i] == -1) {
                c[i] = 0;
                if(!dfs(i)) isGO = false;
            }
        }
        if(isGO) puts("Correct");
        else puts("Wrong");
        for(int i = 1; i <= n; i++) G[i].clear();
    }
    return 0;
}
时间: 2024-10-25 18:56:13

二分图一?二分图判定的相关文章

POJ 1904 King&#39;s Quest 强连通分量+二分图增广判定

http://www.cnblogs.com/zxndgv/archive/2011/08/06/2129333.html 这位神说的很好 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <string> #include <stack> #include <ve

#1121 : 二分图一?二分图判定 (HIHOCoder +二分图的判定)

#1121 : 二分图一?二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly. 新年回家,又到了一年一度大龄剩男剩女的相亲时间.Nettle去姑姑家玩的时候看到了一张姑姑写的相亲情况表,上面都是姑姑介绍相亲的剩男剩女们.每行有2个名字,表示这两个人有一场相亲.由于姑姑年龄比较大了记性不是太好,加上相亲的人很多,所以姑姑一时也想不起来其中有些人的性别.因此她拜托我检查一

hihoCoder #1122 : 二分图二?二分图最大匹配之匈牙利算法

#1122 : 二分图二•二分图最大匹配之匈牙利算法 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 上一回我们已经将所有有问题的相亲情况表剔除了,那么接下来要做的就是安排相亲了.因为过年时间并不是很长,所以姑姑希望能够尽可能在一天安排比较多的相亲.由于一个人同一天只能和一个人相亲,所以要从当前的相亲情况表里选择尽可能多的组合,且每个人不会出现两次.不知道有没有什么好办法,对于当前给定的相亲情况表,能够算出最多能同时

hihoCoder #1127 : 二分图二&#183;二分图最小点覆盖和最大独立集

#1127 : 二分图二·二分图最小点覆盖和最大独立集 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 在上次安排完相亲之后又过了挺长时间,大家好像都差不多见过面了.不过相亲这个事不是说那么容易的,所以Nettle的姑姑打算收集一下之前的情况并再安排一次相亲.所以现在摆在Nettle面前的有2个问题: 1.姑姑想要了解之前所有相亲的情况.对于任一个一次相亲,只要跟参与相亲的两人交流就可以得到这次相亲的情况.如果一个人

hihocoder 第三十四周 二分图三&#183;二分图最小点覆盖和最大独立集

题目1 : 二分图三·二分图最小点覆盖和最大独立集 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上次安排完相亲之后又过了挺长时间,大家好像都差不多见过面了.不过相亲这个事不是说那么容易的,所以Nettle的姑姑打算收集一下之前的情况并再安排一次相亲.所以现在摆在Nettle面前的有2个问题: 1.姑姑想要了解之前所有相亲的情况.对于任一个一次相亲,只要跟参与相亲的两人交流就可以得到这次相亲的情况.如果一个人参加了多次相亲,那么跟他交流就可以知道这几次相亲的情况

HihoCoder1127 二分图三&#183;二分图最小点覆盖和最大独立集

二分图三·二分图最小点覆盖和最大独立集 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上次安排完相亲之后又过了挺长时间,大家好像都差不多见过面了.不过相亲这个事不是说那么容易的,所以Nettle的姑姑打算收集一下之前的情况并再安排一次相亲.所以现在摆在Nettle面前的有2个问题: 1.姑姑想要了解之前所有相亲的情况.对于任一个一次相亲,只要跟参与相亲的两人交流就可以得到这次相亲的情况.如果一个人参加了多次相亲,那么跟他交流就可以知道这几次相亲的情况.那么问题来

HiHo1121 : 二分图一?二分图判定(模板题)

描述 大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly. 新年回家,又到了一年一度大龄剩男剩女的相亲时间.Nettle去姑姑家玩的时候看到了一张姑姑写的相亲情况表,上面都是姑姑介绍相亲的剩男剩女们.每行有2个名字,表示这两个人有一场相亲.由于姑姑年龄比较大了记性不是太好,加上相亲的人很多,所以姑姑一时也想不起来其中有些人的性别.因此她拜托我检查一下相亲表里面有没有错误的记录,即是否把两个同性安排了相亲. OK,让我们愉快的暴力搜索吧! 才怪咧. 对于拿到

Hihocoder #1121 二分图一?二分图判定( bfs或者dfs搜索实现 搜索的过程中进行 节点标记 *【模板】)

对于拿到的相亲情况表,我们不妨将其转化成一个图.将每一个人作为一个点(编号1..N),若两个人之间有一场相亲,则在对应的点之间连接一条无向边.(如下图) 因为相亲总是在男女之间进行的,所以每一条边的两边对应的人总是不同性别.假设表示男性的节点染成白色,女性的节点染色黑色.对于得到的无向图来说,即每一条边的两端一定是一白一黑.如果存在一条边两端同为白色或者黑色,则表示这一条边所表示的记录有误. 由于我们并不知道每个人的性别,我们的问题就转化为判定是否存在一个合理的染色方案,使得我们所建立的无向图满

Hihocoder 二分图一&#183;二分图判定

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly. 新年回家,又到了一年一度大龄剩男剩女的相亲时间.Nettle去姑姑家玩的时候看到了一张姑姑写的相亲情况表,上面都是姑姑介绍相亲的剩男剩女们.每行有2个名字,表示这两个人有一场相亲.由于姑姑年龄比较大了记性不是太好,加上相亲的人很多,所以姑姑一时也想不起来其中有些人的性别.因此她拜托我检查一下相亲表里面有没有错误的记录,即是否把

hihoCoder#1121 二分图一?二分图判定

原题地址 只能说匈牙利算法不能更屌,而且提示里给的伪码也不能更屌了! 只用了第二个优化,因为将输入点集分割成A.B似乎挺麻烦的,索性就没用这个优化. 代码: 1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 6 #define MAX_VERTEX 1024 7 8 int N, M; 9 10 bool g[MAX_VERTEX][MAX_VERTEX]; 11 int m[MAX_VERT