图论——二分图 学习笔记
图论——二分图 学习笔记
定义
二分图,又称二部图,英文名叫 Bipartite graph。
定义为,一个图,可以将节点划分为两个集合,而集合内部没有相连的边。如图:
性质
- 如果对二分图黑白染色,那么每条边两边对应的一定是一个黑点、一个白点;
- 不存在长度为奇数的环,因为只有偶数条边,才能从一个集合回到这个集合。
判定
有两种方法。
第一种是根据性质 \(2\),我们可以 DFS 或 BFS 遍历这张图,如果发现奇环,说明不是二分图。
另一种方法是染色法,即,我们设每个节点有三种状态 \(0/1/2\),分别表示「未被染色」「被染成黑色」「被染成白色」,显然当我们把一个节点染成颜色 \(x\),那么与它相邻的节点只能被染成 \(3-x\) 颜色,如果在染色过程中发现不匹配,则说明不是二分图。
代码:
struct { bool check(graph_t &e) { int n = e.n; vector<int> col(n + 1); function<bool(int, int)> dfs = [&] (int u, int c) { col[u] = c; for (int v : e.g[u]) { if (col[v] == c) return false; else if (col[v]) continue; if (!dfs(v, 3 - c)) return false; } return true; }; rep(i, n) if (!col[i + 1] && !dfs(i + 1, 1)) return false; return true; } } bi_graph;
二分图最大匹配
不大会。
练习题
见:https://www.luogu.com.cn/training/419020
Reference
[1] https://oi-wiki.org/graph/bi-graph/
[2] https://www.luogu.com.cn/blog/ilibilib/solution-at-abc327-d
本文来自博客园,作者:RainPPR,转载请注明原文链接:https://www.cnblogs.com/RainPPR/p/bipartite-graph.html
如有侵权请联系我(或 2125773894@qq.com)删除。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战