二分图博弈 & 二分图最大匹配的可行边

  • 二分图博弈

给定一张二分图,有一个起始点 \(a\)。两个人轮流选择一个点,这个点需要满足:之前没被选过,且与上一次选择的点有直接连边。谁先不能选择则为输。

结论:如果二分图的所有最大匹配都必须包含点 \(a\),那么先手必胜,否则后手必胜。

证明:

  1. 二分图的所有最大匹配都必须包含点 \(a\),那么先手必胜。

先手先选到 \(a\) 的匹配 \(u\) 上。后手只能选到一个匹配点上,因为如果后手选到一个不是匹配点的点 \(v\) 上,那么一定可以用 \(u \to v\) 这条边代替 \(a \to u\) 这条边,与二分图的所有最大匹配都必须包含点 \(a\) 不符。然后先手又选到那个点的匹配点上。最终一定是后手先无法选择。

  1. 二分图的所有最大匹配不一定包含点 \(a\),那么后手必胜。

考虑一种不包含 \(a\) 的最大匹配情况。先手必然先会选到一个匹配点 \(u\) 上(否则可以加上 \(a \to u\) 这个匹配,与这是最大匹配不符),后手再选 \(u\) 的匹配 \(v\)。同理先手还是只能选到一个匹配点上,后手再选它的匹配。最终一定是先手先无法选择。

如何判断二分图的所有最大匹配是否都必须包含点 \(a\)?我们可以先把连向 \(a\) 的所有边全部删了,跑一遍最大匹配,再把这些边加上,再跑一次最大匹配。如果第二次结果变大了,则说明必须包含 \(a\),否则不一定。

  • 二分图最大匹配的可行边

询问 \(x \to y\) 这条边是否可能出现在二分图最大匹配中。

先用 \(\text{dinic}\) 跑出二分图最大匹配,如果 \(x \to y\) 已经是匹配边了则肯定是可行边。

现在考虑如果 \(x \to y\) 不是匹配边的情况。假设现在 \((x \to u),(v \to y)\) 为匹配边,那么只需要满足 \(v\)\(u\) 在残留网络中存在增广路就可以将 \((x,y)\) 变为匹配边,又因为残留网络中有 \((x \to y),(u \to x),(y \to v)\) 这些边,所以 \(x\)\(y\) 在一个环中。这启发我们可以将残留网络进行 \(\text{tarjan}\),如果 \(x\)\(y\) 在同一个强连通分量里的话,那么 \(x \to y\) 一定为可行边。

但是有可能 \(u\) 找了一个还没有被匹配的 \(z\) 作为匹配,这样 \(x\) 直接就可以和 \(y\) 匹配了。如何解决这种情况?其实我们在 \(\text{tarjan}\) 的时候把源点和汇点所连的边也添加进去就行了。因为如果 \(u\) 可以找一个还没有被匹配的 \(z\) 作为匹配,那么在残留网络中一定会出现这样的环:\(v \to x \to y \to u \to z \to t \to v\),这样这种情况就一定会被考虑到了。

posted @ 2024-01-18 20:49  Creeper_l  阅读(14)  评论(0编辑  收藏  举报