- C20250070's blog
5/31
- 2024-5-31 9:27:15 @
从二分图到网络流
二分图最大权匹配
二分图匹配,但是每条边有一个边权,求一个匹配使得边权和最大。
如果不用网络流,可以用 KM 算法。
考虑到二分图中两个集合中的点并不总是相同,为了能应用 KM 算法解决二分图的最大权匹配,需要先作如下处理:将两个集合中点数比较少的补点,使得两边点数相同,再将不存在的边权重设为 ,这种情况下,问题就转换成求 最大权完美匹配问题,从而能应用 KM 算法求解。
算法流程
首先我们给每个顶点赋一个可行顶标,其中左边标记为 ,右边标记为 ,使得对所有边 (,) 满足 。
那么,考虑这个图 G 的一个子图 G',使得 G' 包含 G 中所有点,但只有那些满足 的边。那么,对 G' 的一个完美匹配,它的权值就等于。也就是说我们需要最大化这个和。
将 初始赋值为 , 初始赋值为 ,然后选一个未匹配点,如同最大匹配一样求增广路。找到增广路就增广,否则,我们可以尝试调整顶标。
调整顶标过程中,其实就是要不断的加入新的边,也就是使更多的边满足 。那么接下来找一条边 (,) ,使其满足 不在二分图最大匹配中,而 在二分图最大匹配中。我们希望这条边加入二分图匹配,就要使这条边满足条件,即顶标和要减少 。 因为此时点 在二分图最大匹配中,如果改变顶标会影响其他边,所以可以对于在二分图最大匹配中的任意点 ,将 或 。为了防止修改完导致部分顶标不满足 ,每次找的 要尽量小。 每次找边复杂度 ,二分图最大匹配的复杂度 ,总复杂度 。