KM算法(二分图完美匹配)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KM算法(二分图完美匹配)相关的知识,希望对你有一定的参考价值。

前言

其实这是一个很玄学的算法,我也不是很懂。但是慢慢地写,就慢慢地懂了。


例子

我们先看到这样一个例子:
现有n个男生和n个女生,每一个女生对于一个男生都有一个期望值。现在想知道期望值最大是多少。

技术分享图片

算法

那么显然,我们需要一种算法来完成这个任务,KM腾空出世!

 

在此之前,我们需要了解一些东西:

前置知识

期望值:女生连的边中边权最大的值,称之为女生的期望值

l(x)+l(y)>=w(i,j)

当l(x)+l(y)=w(i,j)时,是M图的完美匹配!

过程

    原则

  • 能换就换(思想很像匈牙利求二分图最大匹配)

    做法

  1. 对于每一个妹子,选择她最喜欢的男生
  2. 如果无法达到以上要求,前往4
  3. 如果可以,递归修改她人男友.前往1
  4. 所有访问过的女生值域减去
  5. 访问过的男生值域加上

代码实现

 

复杂度及优化

以上代码的复杂度为O(n^4)

有一些优化可以使代码复杂度降为O(n^3),由EK提出

显然,每一次修改,我们都不停地在计算l(x)+l(y)-w(x,y),不妨设一个变量slack表示l(x)+l(y)-w(x,y),那么显然,我们每一次查询就从O(n^2)变成了O(n),每一次修改的复杂度为O(1)

例题

 

以上是关于KM算法(二分图完美匹配)的主要内容,如果未能解决你的问题,请参考以下文章

KM算法带权二分图完美匹配

8/9 基础思维+二分图染色+最大完美匹配KM算法

HDU 3722 Card Game(二分图最佳完美匹配+KM算法)

UVa11383 二分图的最佳完美匹配

UVa11383 二分图的最佳完美匹配

二分图最大权值匹配 KM算法 模板