假设我们当前循环到了, ~ 都找到了匹配,而没有找到匹配,我们要一直找扩充交错树直到找到了交错路我们才继续考虑。设为之前的交错树,为之后的交错树,是之前的相等子图,是之后的相等子图
在第个点找到增广路之前,每次都一定能够找到这么一个吗?是可以的
假设我们已经找不到这么一个了但是还是没有找到增广路。我们为什么会找不到这么一个?是因为原图中不存在满足的边了。我们考虑第个点,这就说明与其关联的边都已经被加入到相等子图中了(否则的话此时第个点的交错树就不会包含这条边,因为这条边压根就没有被添加到相等子图中,而交错树的边肯定都是相等子图的边,也就是说原图中存在满足的边);由于此时我们还没有找到增广路,也就是说对每条与关联的边的另一个端点都是匹配点(否则就是一条增广路),考虑每个的匹配点,对每个来说,与其关联的边也都已经被加入到相等子图中了(否则的话此时第个点的交错树就不会包含这条边,因为这条边压根就没有被添加到相等子图中,而交错树的边肯定都是相等子图的边,也就是说原图中存在满足的边);以此类推。然后考虑最终形成的这棵交错树是什么样子的呢?实际上就是我们将原图中所有的边都添加进这个相等子图中,然后第个点跑出的交错树(因为与交错树中的左部节点关联的边全部被加入到了相等子图中)。然而,由于原图存在完备匹配,所以如果我们将原图中所有的边都添加进这个相等子图中,第个点根本跑不出交错树,矛盾了,所以说明我们在第个点找到增广路之前,一定能够找到这么一个
然后验证在后,对原图(注意不是和,是数据给出的所有边和所有点组成的原图)中的任意一条边仍然满足顶标不等式:如果这条边两端都在交错树或者都不在交错树中,那么仍然满足不等式;如果这条边的右部在交错树中但是左部不在,那么由于右部增加了一个而左部没变,所以这条边仍然满足不等式;如果这条边的左部在交错树中但是右部不在,由于我们找的是最小的,所以仍然满足不等式
也就是说如果我们每次都能找到这么一个,那么构建的新的相等子图一定满足顶标不等式,也就说明P430的定理可以用
再来看看有至少哪些边:
对于匹配边,其两端要么都在交错树中要么都不在交错树中,不可能出现一端在一端不在的情况,所以匹配边仍然在中
对于交错树上的边,显然每一条仍然在中
上面两种边是我们至少包含在中的(中的其他边就不用管了),故有为的超集;而当所有满足的边加入到中之后,根据我们上面的分析,一定是会找到交错路的
综上我们能在满足顶标不等式的前提下找到一个带权最大匹配
代码熟悉一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构