KM算法学习 (二分图带权最大匹配)
计算 二分图带权最大匹配的2种方法: 费用流 / KM
KM算法学习
使用局限性:只能在带权最大匹配是完备匹配的图中使用
- 完备匹配:
G=<V1,V2,E>为二分图,$|V_1| < |V_2|$,$M$为$G$中的一个最大匹配数,且$|M|= |V_1|$,则称$M$为$V_1$到$V_2$的完备匹配 - 完美匹配:当$|V_1| = |V_2|$,若$|V_1|<|V_2|$,则完备匹配为$G$中的最大匹配
- 完备匹配:
KM算法准备条件顶标(顶点标记值),给定第$i (1<=i<=N)$个 左部节点一个整数值$A_i$,给定第$j (1<=j<=N)$个右部节点一个整数值$B_j$, 必须满足$\forall i,j, A_i+B_j \geq w(i,j)$,$w(i,j)$表示
i,j之间的边权( 无 边 设 为 负 无 穷 )相等子图,二分图中 所有满足$A_i+B_j = w(i,j)$的边构成的子图
若相等子图有完备匹配,那么就是带权最大匹配
交错树.左部分的点匹配不成功时
dfs访问过的点和边组成的树
KM算法流程
初始化$A_i = max_{1\leq j \leq N}{w(i,j)}$(点的所有出边的中的边的值),$B_j=0$
dfs过程中记录$K = min{A_i+B_j-w(i,j)}$,如果把交错树中左部顶点的顶标全都减小K,右部顶点的顶标增加K:- 两端都在交错树的边$(i,j)$ ,$A_i+B_j$没有变化,仍然属于原来相等子图
- 两端都不在交错树的边$(i,j)$,$A_i+B_j$都没变化,仍然不属于原来相等子图
- 左端不在右端在交错树的边$(i,j)$,$A_i+B_j$变大,原来不属于,现在更不可能属于
- 左端在而右端不在交错树的边$(i,j)$,$A_i+B_j$变小,原来不在,现在可能进入相等子图中,使得相等子图变大,
未找到该点的完备匹配通过上一步修改顶标值一直找下去
例题POJ 2195
- 要求的是最小权值的完美匹配,将权值转成负值使用KM算法得到最大权值和换成正数也就是最小
1 | |
KM算法学习 (二分图带权最大匹配)
https://blog.989883.xyz/2019/10/02/csdn/KM算法学习 (二分图带权最大匹配)/