二分图最小点覆盖输出方案

老年选手不记得怎么输出方案了…
其实就是复习一波König定理

首先我们知道:最小点覆盖(N)=最大匹配数(M)
下面给出证明

N<M

在匹配边之间,显然不存在相同的顶点
因此,想覆盖每一条匹配边,则至少需要M个顶点
矛盾

N>M

如果我们可以给出一个方案使得N=M
那么显然这个情况就不用讨论了

N=M

我们尝试使用我们构造出的最大匹配方案来进行最小点覆盖
过程其实很简单,从每一个右边未匹配的节点出发,类似于匈牙利算法地走
也就是走一条非匹配边再走一条匹配边
然后将沿路所有的节点标记
最后左边标记的节点和右边未被标记的节点即使最小点覆盖
下文将这些点为选出的点

我们选了几个点?
首先,我们选择的都是匹配边上的点
通过走的方式,我们可以发现我们的路径是未匹配点(右)—>匹配点(左)—>未匹配点(右)—>匹配点(左)—>…未匹配点(右)
因此左端有标记的都是匹配点
右端没有标记的显然都是未匹配点
而一条匹配边显然不可能只有一个点被标记
只有右边有标记显然不可能
只有左边有标记那遍历左端点的时候肯定会经过这条边
因此我们选择的点数不可能比M大
而每一条匹配边又至少有一个点被标记
类似匈牙利算法,每条匹配边的左端点肯定要被遍历
因此这里N=M了

覆盖全部边了吗?
显然不存在一条边他的左端点没有标记而右端点有标记
我们讨论一下右端点标记的来历就行
如果右端点是非匹配点得到标记的,那么他应该会经过这条边,从而使左端点得到标记
反过来就是这个右端点是匹配点,那么他的标记肯定就是左端点给的,左端点应该有标记

什么,你说右端点的标记是另外一个左端点给的?
显然不可能啊,那这样你不就找到一条新的增广路了?
因为你左端点之前没有被遍历过,而右端点又被一个起点为未匹配的右端点遍历到了
这不就匹配+1了?
显然不存在啊

因此,我们得到了一个输出方案的方案
至于模板,就把匈牙利算法基本上拷贝一份打个标记就可以了
我就不贴了(懒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值