描述

二部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图是不是二部图。证明二部图可以用着色来解决,即我们可以用两种颜色去涂一个图,使的任意相连的两个顶点颜色不相同,切任意两个结点之间最多一条边。为了简化问题,我们每次都从0节点开始涂色

输入

多组数据 第一行一个整数 n(n<=200) 表示 n个节点 第二行一个整数m 表示 条边 随后 m行 两个整数 u , v 表示 一条边

输出

如果是二部图输出 BICOLORABLE.否则输出 NOT BICOLORABLE.

样例输入

3
3
0 1
1 2
2 0
3
2
0 1
0 2

样例输出

NOT BICOLORABLE.
BICOLORABLE.

思路

定义:一个无向图G是二部图当且仅当G中无奇数长度的回路

二分图相关:二分图的最大匹配、完美匹配和匈牙利算法

我们利用染色法来判断一个图是不是二分图,先找一个点为起点,然后把与它相连的点的颜色都变成与它相反的颜色,然后把这些点加入到队列中,如果这些点的颜色与父节点的不一样,就忽略,如果一样就证明了这个图不是二分图

代码

#include<cstdio>
#include<cstring>
#include<string>
#include<set>
#include<iostream>
#include<stack>
#include<queue>
#include<vector>
#include<algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define mod 10000007
#define debug() puts("what the fuck!!!")
#define ll longlong
using namespace std;
const int N=200+20;
vector<int> G[N];
int color[N];
int dfs()
{queue<int>q;q.push(0);color[0]=1;while(!q.empty()){int v1=q.front();q.pop();for(int i=0; i<G[v1].size(); i++){int v2=G[v1][i];if(color[v2]==-1){color[v2]=-color[v1];q.push(v2);}else if(color[v1]==color[v2])return 0;}}return 1;
}
int main()
{int n,m,a,b;while(~scanf("%d",&n)){for(int i=0; i<N; i++)G[i].clear();mem(color,-1);scanf("%d",&m);while(m--){scanf("%d%d",&a,&b);G[a].push_back(b);G[b].push_back(a);}if(dfs())puts("BICOLORABLE.");elseputs("NOT BICOLORABLE.");}return 0;
}

NYOJ1015 二部图(染色法判断二分图)相关推荐

  1. hdu 5285(染色法判断二分图)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5285 解题思路:很明显的是二分图的判定,用染色法即可. 不过这题有一个坑,当n<=1和m=0时要 ...

  2. 图论 —— 染色法判断二分图

    二分图定义 二分图,又称二部图,英文名叫 Bipartite graph. 二分图是什么?节点由两个集合组成,且两个集合内部没有边的图.换言之,存在一种方案,将节点划分成满足以上性质的两个集合. 二分 ...

  3. E. Split Into Two Sets(染色法判断二分图)

    Problem - 1702E - Codeforces 波利卡普最近得到了一组n(数字n-偶数)的骨牌.每块多米诺骨牌包含1到n的两个整数. 他能把所有的骨牌分成两组,使每组骨牌上的数字都不一样吗? ...

  4. 二部图(染色法判断二部图)

     二部图 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 二部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图是不是二部图. ...

  5. 图的遍历(染色法判断奇环)

    图的遍历(染色法判断奇环) 传送门 思路:首先图应该为连通图,所需要加的边数即addedge=add_{edge}=addedge​=连通块数−1-1−1 然后又因为是要每次走两步,即最后要走偶数步即 ...

  6. 【染色法判别二分图】

    模板题: AcWing 860. 染色法判定二分图 解题思路: (1)判断一个图是否是二分图,判断是否存在奇数环即可,用染色法判断即可. (2)二分图: 是指可以将点集分成两半,每个集合内都没有边,但 ...

  7. 染色法判定二分图 匈牙利算法

    染色法判定二分图 思路:相邻的点染不同颜色 看能不能染完 如果过程中出现相邻点相同颜色,就不可以 注意:需要遍历n个点 看此点是否被染色过 如果没有就进行一次dfs或bfs 二分图:可以把点分成两个集 ...

  8. 染色法判断无向图是否为二部图

    二分图 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的 ...

  9. AcWing 860. 染色法判定二分图 (染色法)

    题目链接 : 点击查看 题目描述 : 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环. 请你判断这个图是否是二分图. 输入输出格式 : 输入 第一行包含两个整数 n 和 m. 接下来 m ...

最新文章

  1. mongodb中简单的根据时间过滤进行查询
  2. 维特根斯坦:为何夸大人工智能是对人性的贬损?
  3. 麦肯锡季刊 | 人工智能的发展与障碍
  4. python入门代码示例-总算知道python入门代码示例
  5. 数学建模之图论——图与网络模型(一)(基本概念和最短路问题,附MATLAB源码)
  6. 开发里程碑计划_如何通过里程碑控制项目进度
  7. java 两个list相等_java 怎么比较两个list是否相同
  8. 详解SSTI模板注入
  9. 笔记本触摸板没有反应了
  10. 计算机主板自动重启,电脑开机后自动重启,详细教您电脑开机后自动重启如何解决...
  11. codeblocks 添加多个工程文件 codeblocks添加已存在工程
  12. 美满电子-88E1111PHY
  13. dw网页设计期末设计一个网页_《网页设计与制作Dreamweaver》期末考试试题
  14. Mysql数据库修改某个字段的值,或修改某个字段的默认值
  15. 串列配置(Tandem)在Kintex-7互联TRD中的实现
  16. 【某航】关联规则分析CatalogCrossSell数据集——数据挖掘导论
  17. C语言实现简易金山打字通
  18. 计算机文化基础(高职高专版 第十一版)第五章答案
  19. 计算机网络原理2020年8,2020年自考计算机网络原理考前资料
  20. AI芯片:几种常见类型的AI芯片

热门文章

  1. 性能测试框架gatling
  2. 堆排序、二分插入排序(C++代码)
  3. 《Intel汇编语言程序设计》书中例子编译
  4. 宝塔安装python
  5. 学渣考深大计算机,深圳大学好不好?为什么有人说是二本?
  6. 04_什么是隐式转换?什么是显式转换?
  7. 5G智能专网是什么?有什么用?怎么部署?
  8. 企业宣传新产品软文推广如何做_软文管家
  9. 字符串的三种格式化方法
  10. get新技能!做excel表格超实用技巧大汇总