题目连接

https://www.acwing.com/problem/content/862/

思路

我们对每一个节点进行染色操作,我们需要注意的是我们染色后要将当前节点的所有相邻节点全部染成另一种颜色,如果出现颜色相同的情况,那么就说明产生了奇数边的环,也就说明不存在二分图

代码

代码一

#include<bits/stdc++.h>
using namespace std;const int N = 1e5+10;
vector<int> V[N];
int vis[N];
int n,m;
bool fg;bool dfs(int u,int c){vis[u] = c;for(int i = 0,l = V[u].size();i < l; ++i) {int v = V[u][i];if(c == vis[v]) return false;//染到相同颜色else if(!vis[v] && (!dfs(v,3-c))) return false;//如果下一个染色失败,则返回false}return true;
}int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);cin>>n>>m;int u,v;for(int i = 1;i <= m; ++i) {cin>>u>>v;V[u].push_back(v),V[v].push_back(u);}for(int i = 1;i <= n; ++i) {if(!vis[i] && (!dfs(i,1))) {cout<<"No"<<endl;return 0;}}cout<<"Yes"<<endl;return 0;
}

代码二

#include<bits/stdc++.h>
using namespace std;const int N = 1e5+10;
vector<int> V[N];
int vis[N];
int n,m;
bool fg;void dfs(int loc){if(!fg) return;for(int i = 0,l = V[loc].size();i < l; ++i) {int v = V[loc][i];if(vis[v] == vis[loc]) {fg = false;return;}if(!vis[v]){vis[v] = 3 - vis[loc];dfs(v);}}
}int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);cin>>n>>m;fg = true;int u,v;for(int i = 1;i <= m; ++i) {cin>>u>>v;V[u].push_back(v);V[v].push_back(u);}for(int i = 1;i <= n; ++i) {if(!vis[i]) vis[i] = 1,dfs(i);}if(fg) cout<<"Yes"<<endl;else cout<<"No"<<endl;return 0;
}

AcWing 860. 染色法判定二分图(染色法)相关推荐

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

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

  2. 因果图法+判定表+正交试验法自我学习(转)

    转自:http://www.51testing.com/html/19/422619-249780.html 因果图法 考虑到输入组合的情况 有3个部分: 因=输入条件 中间结点=输出值必须的前提条件 ...

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

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

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

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

  5. 二分图(染色法+匈牙利法)学习笔记

    一.二分图模板 二分图的性质: 集合内部没有边 二分图当且仅当图中不含奇数环 1.1. 染色法判断是否为二分图 简要介绍 采用 dfsdfsdfs 遍历图.尝试把和一个点相连的所有的点涂为不同色(一共 ...

  6. POJ 2942 Knights of the Round Table 【点双联通 + 二分图染色法判奇环】

    传送门 亚瑟王要在圆桌上召开骑士会议,为了不引发骑士之间的冲突,并且能够让会议的议题有令人满意的结果,每次开会前都必须对出席会议的骑士有如下要求: 1. 相互憎恨的两个骑士不能坐在直接相邻的2个位置: ...

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

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

  8. [NOIP2010]关押罪犯(二分+二分图染色)

    传送门 大意:我们把图分为两部分,使得两部分中的内部边的最大权值最小. 思路:哎,拿到题的时候想了二分图染色,发现不好做,但我没有想到二分,只好最后去骗了一个30分.正确的思路是:首先我们要 去二分最 ...

  9. P1155 双栈排序(二分图染色)

    P1155 双栈排序(二分图染色) 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一 ...

最新文章

  1. linux 查询wwid命令,linux肿么查看硬盘的wwid
  2. JavaScript异步编程解决方案探究
  3. .net框架读书笔记---类型成员及其访问限定(一)
  4. php内核介绍及扩展开发指南,4.5. 发布扩展信息
  5. 数据结构与算法-原始版-a+b+c=1000并且a方+b方=c方
  6. 曾经一手好牌,但如今却被网友怼或已堕落
  7. (20)HTML5 <summary>标签
  8. Realm的入门使用
  9. pycharm 右键无法显示unittest框架解决右键只有unittest 运行如何取消右键显示进行普通run...
  10. Spring Cloud入门一 Eureka Server
  11. 2016年最值得学习的五大开源项目
  12. 酷派删除android系统软件,Coolpad酷派8720L哪些系统软件可以删除(精简列表)
  13. HTML5官方文档学习笔记(四)----新的语义元素
  14. VTK和numpy的整合
  15. 备战金九银十,腾讯 T4 梳理 2022 年最全 999 道 Java 岗必备面试题答案
  16. 如何理解假设检验中的假设设计?
  17. 5G + 智能制造 = 未来工厂
  18. 51单片机定时器/计数器(定时器中断)
  19. kylin系统gcc编译报错fatal error:stadio.h: 没有那个文件或目录解决办法
  20. 投资理财-长期的难处

热门文章

  1. [Bzoj1003][ZJOI2006]物流运输(spfa+dp)
  2. 软件测试 : 第5次作业 -- 基于Jmeter的 性能测试
  3. UVA 10003 Cutting Sticks (区间dp)
  4. bzoj千题计划290:bzoj3143: [Hnoi2013]游走
  5. 网络协议:传输层(http://java-mzd.iteye.com/blog/1007577)
  6. Cent OS6.6 的vsftps 的root上传配置
  7. Gradle 构建 android 应用常见问题解决指南
  8. 注册登录时本地图片验证码
  9. Clipboard.js – 现代方式实现复制文本到剪贴板
  10. 如何在套接字IO操作上设置超时机制