二分图博弈 & 二分图最大匹配的可行边
- 二分图博弈
给定一张二分图,有一个起始点 \(a\)。两个人轮流选择一个点,这个点需要满足:之前没被选过,且与上一次选择的点有直接连边。谁先不能选择则为输。
结论:如果二分图的所有最大匹配都必须包含点 \(a\),那么先手必胜,否则后手必胜。
证明:
- 二分图的所有最大匹配都必须包含点 \(a\),那么先手必胜。
先手先选到 \(a\) 的匹配 \(u\) 上。后手只能选到一个匹配点上,因为如果后手选到一个不是匹配点的点 \(v\) 上,那么一定可以用 \(u \to v\) 这条边代替 \(a \to u\) 这条边,与二分图的所有最大匹配都必须包含点 \(a\) 不符。然后先手又选到那个点的匹配点上。最终一定是后手先无法选择。
- 二分图的所有最大匹配不一定包含点 \(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\),这样这种情况就一定会被考虑到了。