二分图的最小顶点覆盖 最大独立集 最大团
二分图的最小顶点覆盖 最大独立集 最大团
重要结论写在最前面:
- ① 最小顶点覆盖等于二分图的最大匹配
- ② 最大独立集=所有顶点数-最小顶点覆盖
- ③ 二分图的最大团=补图的最大独立集
一、二分图的最小顶点覆盖
定义:假如选了一个点就相当于覆盖了以它为端点的所有边。最小顶点覆盖就是选择最少的点来覆盖所有的边。
方法: 最小顶点覆盖等于二分图的最大匹配
我们用二分图来构造最小顶点覆盖。
对于上面这个二分图,顶点分为左右两个集合,集合包含,集合包含,假如现在我们已经找到一个最大匹配 ,就是上面的红线所标注的。
作如下定义:
- 定义为已经匹配过的点,其他点为未匹配的点
- 定义为已匹配的边,其他边为未匹配的边
下面我们从集合中找出未匹配的点,就是上面标记的和。每次我们从右边选出一个未匹配的点,从该点出发, 做一条
未匹配边->匹配边->未匹配边->……->匹配边(注意最后以匹配边结尾),并且标记用到的点
得到下图:
其中紫色的边为我们刚才画的边,其中标记的点有。 上图的两条路为:
这两条路都是 未匹配边->匹配边->未匹配边->……->匹配边
注意:如果一个右侧未匹配点有多条边,那么这样的从该点开始的路径就有多条,上面的和都只有一条边,所以从每个点开始的这样的路径只有一条。
现在我们将 左侧标记的点 和 右侧未标记的点 选出组成集合, 那个就是一个最小顶点覆盖集,就是集合可以覆盖所有的边。
注:形象的解释就是从出发,可以到达点集中所有的点。
下面 证明:
(1),即 最小顶点覆盖等于二分图最大匹配
- 左边标记的点全都为匹配边的顶点,因为我们构造路径的时候左边的点向右找的边都是最大匹配的边
解释:未匹配边->匹配边,都是这样构建的,所以,左边标记的点当然都是匹配边的顶点。
- 右边未标记的点也为二分图最大匹配边的顶点,而且左边标记的加上有边未标记的正好是最大匹配的数目
(2)能覆盖所有的边。所有的边可以分为下面三种情况:
- ① 左端点标记、右端点标记;这些边一定被左侧标记的点覆盖,比如上面的,
- ② 右端点未标记;这些边一定被右侧未标记的点覆盖,比如上面的
- ③ 左端点未标记、右端点标记。
下面我们证明 ③ 这种边压根就不会存在:若是最大匹配中的边,由于右端点不可能是一条路径的起点(因为我们的起点都是从集合中未匹配的点开始的),于是右端点的标记只能是在构造中从左边连过来,这是左端点必定被标记了,这时就转化成了;若属于未匹配边,那么左端点必定是一个匹配点,那么的右端点必定是一条路径的起始点,因此的左端点也会成为一条路径的第二个点而被标记,这时也就成了。所以这种边肯定是不存在的。
(3)是最小的顶点集:因为最大匹配为,而,所以如果中的点再少,那么连个匹配的边都不能覆盖。
三、二分图的最大独立集
定义:选出一些顶点使得这些顶点两两不相邻,则这些点构成的集合称为独立集。找出一个包含顶点数最多的独立集称为最大独立集。
方法: 最大独立集 = 所有顶点数 - 最小顶点覆盖
在上面这个图中最小顶点覆盖=,即构成最小顶点覆盖,则其他点个构成最大独立集。且其他点不可能相连。假设其他点相连则这条边必定没有被 覆盖,与是最小顶点覆盖矛盾。因此其他点之间必定没有边。而是最小顶点覆盖,所谓最小就是不能再小了,因此我们的独立集就是最大了。
四、二分图的最大团
定义:对于一般图来说,团是一个顶点集合,且由该顶点集合诱导的子图是一个完全图,简单说,就是选出一些顶点,这些顶点两两之间都有边。最大团就是使得选出的这个顶点集合最大。对于二分图来说,我们默认为左边的所有点之间都有边,右边的所有顶点之间都有边。那么,实际上,我们是要在左边找到一个顶点子集,在右边找到一个顶点子集,使得中每个顶点和中每个顶点之间都有边。
方法: 二分图的最大团=补图的最大独立集
补图的定义是:对于二分图中左边一点和右边一点,若和之间有边,那么在补图中没有,否则有。
这个方法很好理解,因为最大独立集是两两不相邻,所以最大独立集的补图两两相邻。
五、练习题
六、题单
https://blog.csdn.net/weixin_43918350/article/details/114454715
POJ1548
题目大意:给出一张地图上的垃圾坐标,以及若干机器人。每个机器人只可以从左->右,上->下,走完就废。问最少派出多少个机器人才能捡完所有垃圾。
解答:
最小路径覆盖的话非常简单,这题显然可以转化为DAG,代码见参考博客
不过也可以使用LIS,运用dilworth定理,也就是求最长反链的长度。也就是求最长下降子数列的长度
估计人数
与上题有相似之处,但要求必须相邻。
首先,可以使用最小可重复路径覆盖,因为该图可以轻易转化为DAG图,具体方法见参考博客
不过,显然可以仿照上一题使用LCS来解决。这里观察到对于每个联通块,显然有最长反链的长度即为最少人数(dilworth定理),代码如下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2019-07-31 牛B的大数据库
2018-07-31 新版本安装包需求汇总
2014-07-31 扩展自己的数组核心库
2014-07-31 关于小周同志在消息模块定位功能修改时存在的问题分析
2013-07-31 mina 和 xsocket