UOJ Logo QwX的博客

博客

二分图最大匹配讲解~~~

2016-03-01 08:33:17 By QwX

继续开坑~btw,I love bx2k.

这次来讲HK算法。我二分图最大匹配只会HK是不是药丸QwQ

和所有匹配算法一样,中心思想还是找增广路。但是找增广路之前,我们要把整个图分层。

说到分层,Dinic选手是不是想到了些什么我是isap选手,是的,就是按Dinic的方法分层。

首先把左边所有没有匹配的点全部加入队列,层数为0,再把这些点通过非匹配边连向的右边的点的层数标为1,但是不加入队列,而是对于右边这些层数为1的点,如果它们有匹配点,就把匹配点再加入队列,层数标为2,后面的以此类推。

看到这里是不是觉得和一般图最大匹配有点类似呢,‘只用把一类点加入队列’,这样做才能体现出‘走一条非匹配边走一条匹配边’的增广路。

于是和Dinic一样,分层结束之后就可以找到每个点出发的最短的增广路,这也就是分层的意义。

接下来分类讨论,如果所有能搜到的右边点都有匹配点,那么不能再找到增广路了,算法结束。

否则,对于每个层数为0的左边点,找到他们连出去的最短的增广路,也就是每次走让层数加一的边的增广路。

可证明,一共只会执行O(sqrt(n))次上面的操作,于是总复杂度就是O(sqrt(n)$\times$(n+m))的。

然而用Dinic做也是这个复杂度,其实这个算法就是Dinic的二分图简化版?

这就是HK算法咯,是不是一个又好打又快的算法丫~还在犹豫什么,快去学吧!

其实具体细节和技巧依旧很复杂的大家就去看代码吧

另外欢迎大家来问我和二分/一般图最大匹配有关的问题

感觉语文好差啊,写的文章好烂啊,肯定又要被D了QwQ

顺便说一句,我写的所有文章按Ctrl+A全选之后都会看到彩蛋

=w= 看到这句话的都是呆呆哒的神犇! hhh

评论

QwX
占一楼=w=

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。