二分图又称二部图。

二分图是无向图

设G=(V,E)是一个无向图。如顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。

例如这就是一个二分图。 大概就是把顶点分成两堆,每堆内部没有边。

无向图G为二分图的充分必要条件是,G至少有两个顶点, 且其所有回路的长度均为偶数。

最大独立点集:在二分图中,求最少的点集,使得任意两个点之间没有直接边连接。

最小点覆盖:在二分图中,求最少的点集,使得每一条边至少都有端点在这个点集中。

二分图判断:二分图染色。

给一个无向图。要给图上每个顶点染色,并且使任意相邻的顶点染色不同。并且最多用两种颜色。

如果可以进行二分图染色,证明是一个二分图。

如果可以染色,就是如上图,把每一个颜色放入一个堆,就构成了二分图。

模板:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;const int MAX_V = 205;vector<int> G[MAX_V];  // 图
int V;                  // 顶点数
int color[MAX_V];       // 顶点i的颜色 1 或 -1// 把顶点染成1或-1
bool dfs(int v, int c)
{color[v] = c; // 把顶点v染成颜色cfor (int i = 0; i < G[v].size(); ++i) {if (color[G[v][i]] == c) return false;if (color[G[v][i]] == 0 && !dfs(G[v][i], -c)) return false;}return true;
}void solve()
{for (int i = 0; i < V; ++i) {if (color[i] == 0) {if (!dfs(i, 1)) {puts("No");return ;}}}puts("Yes");
}int main()
{int E;while (scanf("%d%d", &V, &E) == 2) {int a, b;for (int i = 0; i < V; ++i) G[i].clear();         memset(color, 0, sizeof color);for (int i = 0; i < E; ++i) {scanf("%d%d", &a, &b);G[a].push_back(b);G[b].push_back(a);}solve();}return 0;
}

例:hdu4751

题意:一堆人,每个人单方面认识一些人,希望把这些人分成两堆,使得每一堆的人都相互认识。

题解:把所有不互相认识的人建边,如果是二分图,则可以。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;const int MAX_V = 105;
bool knows[MAX_V][MAX_V];vector<int> G[MAX_V];
int V;
int color[MAX_V];bool dfs(int v, int c)
{color[v] = c;for (unsigned i = 0; i < G[v].size(); ++i) {if (color[G[v][i]] == c) return false;if (color[G[v][i]] == 0 && !dfs(G[v][i], -c)) return false;}return true;
}void solve()
{for (int i = 1; i <= V; ++i) {if (color[i] == 0) {if (!dfs(i, 1)) {puts("NO");return ;}}}puts("YES");
}int main()
{while (~scanf("%d", &V)) {memset(knows, false, sizeof knows);for (int i = 0; i <= V; ++i) G[i].clear();memset(color, 0, sizeof color);int a;for (int i = 1; i <= V; ++i) {while (~scanf("%d", &a) && a)knows[i][a] = true;}for (int i = 1; i <= V; ++i) {for (int j = i + 1; j <= V; ++j) {if (!knows[i][j] || !knows[j][i]) {G[i].push_back(j);G[j].push_back(i);}}}solve();}return 0;
}

转载于:https://www.cnblogs.com/wenruo/p/5243034.html

二分图判断(交叉染色)相关推荐

  1. poj2942(双联通分量,交叉染色判二分图)

    题意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1.2.总人数为奇数.3.有仇恨的骑士不能挨着坐.问有几个骑士不能和任何人形成任何的圆圈. 思路:首先 ...

  2. HDU - 2444 The Accomodation of Students(二分图判断+二分图最大匹配)

    题目链接:点击查看 题目大意:给出n个学生,他们之间有m个认识关系,但认识关系不具有传递性,比如A认识B,B认识C,A不一定认识C,现在给出认识关系,先判断是否能够将所有学生分为两个集合A和B中去,集 ...

  3. lightoj 1300 边双联通分量+交叉染色求奇圈

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1300 边双连通分量首先dfs找出桥并标记,然后dfs交叉着色找奇圈上的点.这题只要求在 ...

  4. 二分图判断以及二分图最大匹配

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

  5. 无向图G=(V,E)的二分图判断

    二分图的概念 无向图G=(V,E)G=(V,E)G=(V,E)的顶点集VVV可分为两个集合V1V_1V1​,V2V_2V2​,s.t.∀(u,v)∈E,∃u∈V1,v∈V2\: s.t. \: \fo ...

  6. HDU 5971 2016ICPC大连 A: Wrestling Match(二分图判断)

    题意:这题难在题意.. 因为题面太尴尬了所以直接转了吧,据说很多写法都能过 有n个点m条边的图,已知有x个点是黄色的,y个点是红色的(最后的x+y行输入的是这些点的编号) 问是否能将这个图转化成二分图 ...

  7. poj 2942 圆桌骑士 无向图割点 奇圈 交叉染色

    连通类经典题 题意及分析参考: 1.建反向图 2.tarjan 算法求割点3.二部图与奇圈 4.交叉染色 http://blog.csdn.net/lyy289065406/article/detai ...

  8. 【HDU - 2444】The Accomodation of Students(二分图判断 + 匈牙利算法求最大匹配)

    题干: There are a group of students. Some of them may know each other, while others don't. For example ...

  9. poj2942点双连通奇圈-二分图判断Knights of the Round Table

    题意:在亚瑟王的圆桌骑士团中,某些骑士两两之间相互憎恨,这样一来他们开会的时候边不能相邻的坐着.即肯定存在某些人不能参加会议.假如一个骑士所有的会议都不能出席,那么他就会被驱逐.现在已知那些骑士之间相 ...

最新文章

  1. 小型职工工作量c语言,计算机c语言职工工作量统计系统(20页)-原创力文档
  2. WebStorm Git 分支操作
  3. 基于阿里云搭建的适合初创企业的轻量级架构--架构总结
  4. 面板——卡片面板、常规折叠面板、手风琴折叠
  5. 对 Linux 新手非常有用的 20 个命令
  6. 研究发现视频会议增加员工压力、 谷歌地球升级4D交互体验、Apple新品发布、网飞用户增长缓慢等|Decode the Week
  7. vue 进行ajax请求,使用axios
  8. HTML手机上图片显示被压扁,在重新调整Web浏览器HTML |时,文本会被压扁CSS
  9. 信息学奥赛C++语言:行李托运
  10. 2019安卓机皇已定?三星Note10系列被曝将在8月10日发布
  11. 将图片储存在dataset_最新15-16方联体垃圾箱价格图片
  12. ntp同步 mysql_解析Mysql 主从同步延迟原理及解决方案
  13. 停车场管理系统linux实现,基于Linux的停车场管理系统的设计与实现
  14. linux怎么重载mysql配置命令_【Linux命令】数据库mysql配置命令
  15. webstorm汉化后乱码现象解决
  16. ubuntu死机咋办_Ubuntu死机解决方法汇总
  17. Spring源码之启动过程(四)—— Bean的实例化详解
  18. vscode VisualStudio区别
  19. Vs code添加自定义snippet
  20. 解剖NetGuard

热门文章

  1. Github | 标星9W+如何准备谷歌面试?
  2. axios php文件登录,JWT实战:使用axios+PHP实现登录认证
  3. 浏览器与硬件交互的方法_【第2058期】现代浏览器内部揭秘之一
  4. mysql 命令行怎么格式化_dbForge Data Compare for MySQL入门教程:通过命令行格式化代码...
  5. python伪装浏览器什么意思_python爬虫伪装浏览器出现问题求助
  6. html 5效果不显示,详解如何解决H5开发使用wx.hideMenuItems无效果不生效
  7. 华为鸿蒙系统学习笔记10-华为鸿蒙 OS 2.0 发布,源代码现已开放
  8. 【Android】命令行jarsigner签字和解决找不到证书链错误
  9. Codeforces.802C.Heidi and Library (hard) (费用流zkw)
  10. 如何破解受保护的excel密码