二分图最大匹配除了匈牙利算法还有一个Hopcroft-Karp算法,匈牙利算法的复杂的为O(ne),而Hopcroft-Karp算法的
复杂度为O(en^0.5)。
该算法的精髓在于同时找多条增广路进行反转。我们先用BFS找出可能的增广路,这里用到BFS层次搜索的概念,
记录当前结点在第几层,用于后面DFS沿增广路反转时用,然后再用DFS沿每条增广路反转。这样不停地找,直至无法找
到增广路为止。
wiki上的说明: http://en.wikipedia.org/wiki/Hopcroft–Karp_algorithm
推荐两道题测试该算法:
hdu 2389
http://acm.hdu.edu.cn/showproblem.php?pid=2389
这道题空间,时间都卡的比较紧,用前向星的存储方法不停TLE,最后用
vector存邻接表才过的...时间为: 343MS,还算满意~~
SPOJ 4206
https://www.spoj.pl/problems/MATCHING/
裸的二分图匹配,就是用来测时间的,跑了1.43s,也还行~~
附Hopcroft-Karp算法模板:
二分图最大匹配: Hopcroft_Karp算法,复杂度: O(n^2.5).
用BFS找多条增广路,用distx, disty来记录下一个点,用DFS来遍历这些增广路.