二分图
二分图
若一张无向图 ,可以将所有的点分成 个点集,且 个点集内部没有连边,那么称 可以划分为一张二分图。
- 注意:二分图的划分不一定唯一,且不一定连通。有向图在实际问题中,也可以划分一分图
二分图存在的充要条件
- 没有奇环
二分图的判定
染色法,任意选择没有访问的点开始 dfs,并且 交替染色,只要出现一条边的 个端点颜色相同,那么就不是二分图。
1 | bool dfs(int x, int c) |
二分图最大匹配
对于一张无向图 ,且 可以划分为二分图,我们将 条边称为 组“匹配”,在 中选出最多的匹配且所有选出的边不共点,那么这一组边集,就是一组 的最大匹配。
匈牙利算法
1 | bool hungary(int x) |
二分图最小点覆盖
对于一张二分图 ,选取最小的点集 ,使得点集内的点能覆盖所有的边。(在任意一条边至少有 个端点在 中)
性质:
- 二分图最大匹配=二分图最小点覆盖