ARC161F

题面

给定一张含 \(n\) 个点,\(nk\) 条边的图 \(G=(V,E)\),判断是否满足 \(\forall X \subsetneqq V,X\neq \varnothing\)\(X\) 导出子图的边数 \(\div\) \(|X|\) \(< k\)

\(nk\le 5\times 10^4\)

题解

首先要发现这是一个最大权闭合子图的问题,对于一条边 \((x,y)\),其贡献为 \(1\) ,但是选了这条边就必须选点 \(x\)\(y\),而选一个点的代价为 \(k\) ,建立二分图之后,看这个图的最小割是否 \(\ge 0\)

但是直接做会有一个问题,就是我们无法排除 \(X\)\(V\)\(\varnothing\) 的情况,接下来我们就需要通过一些操作排除这两个特殊情况。

我们先强制会选择第一条边,也就是保留这一条边不被割(可以通过设置 \(S\to a_1\) 的容量设为无穷大来防止被割)。此时我们如果可以找到一个方案,使某一条边被舍弃了(被割了),此时这个包含第一条边的方案就是一个非全集、空集且最小割 \(\ge 0\) 的方案,那么此时图就是不合法的。否则就不存在一个包含第一条边且不为全集的方案,使其最小割 \(\ge 0\)

如何实现?首先要分析一下我们是如何求解最大权闭合子图方案的:

  • 对于二分图左边的点,若 \(x\) 可以从 \(S\) 遍历到,就把 \(x\) 对应的给保留(不被割以得到贡献)。
  • 对于二分图右边的点,若 \(x\) 可以从 \(S\) 遍历到,就把 \(x\) 对应的给删去(不被割而不承受代价)。

但是我们实际上是可以有其他方案的,就比如该二分图上个某个子图 \(S\to \{A\}\to \{B\}\to T\),其中 \(\{A\},\{B\}\) 分别是左右边的一个点集,其中 \(S\to \{A\},\{B\}\to T\) 的可用流量都是 \(0\),那么按上面的选法我们割掉的是 \(S\to \{A\}\) 的边,实际上我们也可以选择割掉 \(\{T\}\to T\) 的边。

所以如果我们按照某个点是否能从 \(S\) 到来判断是否割掉该对应的边 ,实际上是尽可能的让左边的边被割。

回到原问题,如果我们要看是否存在一个方案,使某一条边被舍弃了(被割掉),那么我们就在跑完最小割之后对每一个左边的点考虑能不能从 \(S\) 遍历到他,若不可以,那么按照我们的分析,原图就不合法。

之后我们再强制不选第一条边(也就是流量为 \(0\))。同样的,如果存在一个此时我们如果可以找到一个方案,使某一个点被选了(也就是对应的边被割了),此时这个不包含第一条边的方案就是一个非全集、空集且最小割 \(\ge 0\) 的方案,那么此时图就是不合法的。否则就不存在一个不包含第一条边且不为空集的方案,使其最小割 \(\ge 0\)

此时如果我们按照某个点是否能到 \(T\) 到来判断是否割掉该对应的边 ,实际上是尽可能的让右边的边被割。

如果上面两种都找不到,那么就是合法的图了。

启发

  • 一个最大权闭合子图的问题。
  • 探究了最大权闭合子图(最小割)选方案的问题。
  • 对于一个要排除全集和空集的情况,我们可以强制某一个元素选或者不选。
posted @ 2024-02-29 22:37  qwq_123  阅读(4)  评论(0编辑  收藏  举报