简要题意:
给定两个点集与一些边(保证每条边的顶点属于不同点集),求二分图最大匹配。
解释下:二分图最大匹配 就是 最大的边集使得每两条边都不相交,不共点 的边的个数。
那么你会说,我用并查集维护一下就行了?远远不是这样。
本题作为 匈牙利算法 的模板题讲解。
以下面这个关系为例:
假设有 wxq
,wsq
,zmx
,NBL
,bfw
,gyx
与 kkk
六个人。
其中,wxq
,zmx
,gyx
,bfw
是第一点集,其余是第二点集。
并且他们说:
-
wxq: 我觉得
wsq
,NBL
,kkk
都可以成为我的 CP \text{CP} CP。 -
zmx: 我觉得只有
wsq
可以成为我的 CP \text{CP} CP. -
gyx: 我觉得
wsq
和NBL
都可以食用。 -
bfw: 我觉得她们三个都不错啊。
好,下面我们要 尽量满足他们的需求。
第一个人 wxq
,好,他的第一个备选人是 wsq
,那么就先让他和 wsq
成为 CP \text{CP} CP.
第二个人 zmx
来了,并对 wxq
说:
你拿走了 wsq
那我怎么办???
wxq
想:行啊,反正我还有 NBL
和 kkk
.
于是,wxq被绿了 zmx
成功地 ~绿了wxq 得到了 wsq
,然后 wxq
与 NBL
成为 CP \text{CP} CP.
然后,第三个人 gyx
来了,并对 zmx
说:
你拿走了 wsq
那我怎么办?
zmx
想了想说:
我只有她一个备选人啊,我要生存!单身狗还是你做吧
于是 gyx 绿人计划失败
但是 gyx
看自己的备选人还有 NBL
,所以对 wxq
说:
喂喂喂,快点还我 NBL
.
wxq
想:没关系,反正我还有 kkk
对吧。
所以 wxq又被绿了 gyx
绿了wxq 与 NBL
成为了 CP \text{CP} CP,然后 wxq
被轮番绿 与 kkk
成为了 CP \text{CP} CP.
最后一个人 bfw
来了,他先找到 zmx
说:
wsq
给我行不?
zmx
说:我只有她一个人啦!对方拒绝了该请求。
bfw
又辗转来到 wxq
说:
kkk
给我行不?
wxq
说:你们都想绿我是吧,没门 我也只有她一个人了。
bfw
最终对 gyx
说:
救救我,我马上要单身了。
gyx
一口回绝道:我刚刚绿了 wxq,你就像反绿我是吧 我也只有 NBL
一人了,你再找找别人吧。
最后,bfw
成为了单身狗 被抛弃了,他没有 CP \text{CP} CP,所以上述的 二分图最大匹配 为