【模板】带花树-bzoj4405: [wc2016]挑战NPC

本文介绍了带花树算法用于求解一般图的最大匹配问题,重点讲解了如何处理奇环以及如何通过BFS进行增广路径搜索。通过将奇环缩点并利用并查集维护,将问题转化为二分图匹配。文章还详细阐述了BFS树的构造过程及增广路径的更新策略,并给出了bzoj4405问题的具体应用。
摘要由CSDN通过智能技术生成

带花树

带花树是一种求解一般图最大匹配的算法。时间复杂度上限 O ( n 3 ) O(n^3) O(n3)

首先推荐一篇很好理解的博客

一般图相较于二分图就是图上多了奇环,而“花”指的就是图中的奇环。对于奇环的匹配:首先在环内尽可能地匹配显然是最优的,若环上有 2 k + 1 2k+1 2k+1个点,则环内可以用 k k k条边匹配任意 2 k 2k 2k个点,剩下一个未匹配的点可以向外匹配,这个未匹配点是根据需要回溯时才确定的,所以将奇环缩点,用并查集维护是否在同一个“花”内。

具体来说,我们每次选择一个未匹配点 b f s bfs bfs进行增广(将该点标记为 S S S),并将所有访问到的点标记为 S S S T T T(出发点标记为 S S S)。为了回溯连边还需要用到 p r e pre pre数组,对于每个标记为 T T T的点 i i i p r e i pre_i prei表示当前 b f s bfs bfs i i i点第一次是被哪个结点访问到的。

一颗 b f s bfs bfs树形如:
在这里插入图片描述
其中起点为 s s s,黑点标记为 S S S,红点标记为 T T T S , T S,T S,T标记则相当于二分图匹配中的出度和入度一样。

如同二分图匹配,每次只增广 S S S标记点,将需要增广的点逐个压入队列(一开始队列中只有起点 S S S)依次处理。

如果 d f s dfs dfs的话不能之间判断增广点的类型,甚至可能增广到一个首尾都是自己的奇环,所以 b f s bfs bfs做的实际上是一个给点定型的操作,缩点后转成二分图。

模拟一下从当前点 x x x向外扩展到 v v v的情况:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值