二分图判断(交叉染色)
二分图又称二部图。
二分图是无向图。
设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
二分图判断(交叉染色)相关推荐
- poj2942(双联通分量,交叉染色判二分图)
题意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1.2.总人数为奇数.3.有仇恨的骑士不能挨着坐.问有几个骑士不能和任何人形成任何的圆圈. 思路:首先 ...
- HDU - 2444 The Accomodation of Students(二分图判断+二分图最大匹配)
题目链接:点击查看 题目大意:给出n个学生,他们之间有m个认识关系,但认识关系不具有传递性,比如A认识B,B认识C,A不一定认识C,现在给出认识关系,先判断是否能够将所有学生分为两个集合A和B中去,集 ...
- lightoj 1300 边双联通分量+交叉染色求奇圈
题目链接:http://lightoj.com/volume_showproblem.php?problem=1300 边双连通分量首先dfs找出桥并标记,然后dfs交叉着色找奇圈上的点.这题只要求在 ...
- 二分图判断以及二分图最大匹配
概念 二分图又称作二部图 ,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的 ...
- 无向图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 ...
- HDU 5971 2016ICPC大连 A: Wrestling Match(二分图判断)
题意:这题难在题意.. 因为题面太尴尬了所以直接转了吧,据说很多写法都能过 有n个点m条边的图,已知有x个点是黄色的,y个点是红色的(最后的x+y行输入的是这些点的编号) 问是否能将这个图转化成二分图 ...
- poj 2942 圆桌骑士 无向图割点 奇圈 交叉染色
连通类经典题 题意及分析参考: 1.建反向图 2.tarjan 算法求割点3.二部图与奇圈 4.交叉染色 http://blog.csdn.net/lyy289065406/article/detai ...
- 【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 ...
- poj2942点双连通奇圈-二分图判断Knights of the Round Table
题意:在亚瑟王的圆桌骑士团中,某些骑士两两之间相互憎恨,这样一来他们开会的时候边不能相邻的坐着.即肯定存在某些人不能参加会议.假如一个骑士所有的会议都不能出席,那么他就会被驱逐.现在已知那些骑士之间相 ...
最新文章
- 小型职工工作量c语言,计算机c语言职工工作量统计系统(20页)-原创力文档
- WebStorm Git 分支操作
- 基于阿里云搭建的适合初创企业的轻量级架构--架构总结
- 面板——卡片面板、常规折叠面板、手风琴折叠
- 对 Linux 新手非常有用的 20 个命令
- 研究发现视频会议增加员工压力、 谷歌地球升级4D交互体验、Apple新品发布、网飞用户增长缓慢等|Decode the Week
- vue 进行ajax请求,使用axios
- HTML手机上图片显示被压扁,在重新调整Web浏览器HTML |时,文本会被压扁CSS
- 信息学奥赛C++语言:行李托运
- 2019安卓机皇已定?三星Note10系列被曝将在8月10日发布
- 将图片储存在dataset_最新15-16方联体垃圾箱价格图片
- ntp同步 mysql_解析Mysql 主从同步延迟原理及解决方案
- 停车场管理系统linux实现,基于Linux的停车场管理系统的设计与实现
- linux怎么重载mysql配置命令_【Linux命令】数据库mysql配置命令
- webstorm汉化后乱码现象解决
- ubuntu死机咋办_Ubuntu死机解决方法汇总
- Spring源码之启动过程(四)—— Bean的实例化详解
- vscode VisualStudio区别
- Vs code添加自定义snippet
- 解剖NetGuard
热门文章
- Github | 标星9W+如何准备谷歌面试?
- axios php文件登录,JWT实战:使用axios+PHP实现登录认证
- 浏览器与硬件交互的方法_【第2058期】现代浏览器内部揭秘之一
- mysql 命令行怎么格式化_dbForge Data Compare for MySQL入门教程:通过命令行格式化代码...
- python伪装浏览器什么意思_python爬虫伪装浏览器出现问题求助
- html 5效果不显示,详解如何解决H5开发使用wx.hideMenuItems无效果不生效
- 华为鸿蒙系统学习笔记10-华为鸿蒙 OS 2.0 发布,源代码现已开放
- 【Android】命令行jarsigner签字和解决找不到证书链错误
- Codeforces.802C.Heidi and Library (hard) (费用流zkw)
- 如何破解受保护的excel密码