2-SAT 问题

求解 2-SAT 问题

$2-\rm Sat$ 问题是求解某个 $\rm bool$ 方程组方程组中的每个方程被描述为$x_i$ 为真$/$假 或 $x_j$ 为真$/$

我们可以对每个 $x_i$$\lnot x_i$ 分别建点$x_i$ 为假看作 $\lnot x_i$ 为真这样方程就仅有一种类型了即若 $p$ 为真则 $q$ 为真具体来说建一些边 $u\to v$ 表示当 $u$ 为真的时候 $v$ 一定为真比如有方程 $p$ 为真或 $q$ 为真时建两条边 $p\to \lnot q$$q\to \lnot {p}$

建完图后显然同一个强连通分量中的点取值必然相同那么如果 $a$$\lnot a$ 在同一个强连通分量里则该 $\rm bool$ 方程组无解易知存在 $a$$\lnot a$ 在同一个强连通分量中为该 $\rm bool$ 方程组无解的充要条件

对于其它的点每对 $a$$\lnot a$ 中有且仅有一个为真我们令拓扑序大的那个为真可以分情况证明其最优性

  • $a$$\lnot a$$\rm DAG$ 的同一条链上那么拓扑序大的必然为真否则两个都为真与题意相悖
  • $a$$\lnot a$ 在不同链上那么两个点的取值其实无所谓但一定要跟拓扑序相关因为每条链上拓扑序的大小关系时严格的用拓扑序规定某个点取值是否为真可以使为真的点在同一条链上尽可能降低对其他点的影响另外为了保证跟上一种情况的统一性仍选择令拓扑序大的点为真

另一方面我们发现 $\rm Tarjan$ 缩点所求出的 $\rm SCC$ 强连通分量数组的值负相关可以理解为拓扑序更小的点更后入栈也更先出栈编号故最后对比 $a$$\lnot a$$\rm SCC$ 值即可判断它们谁为真谁为假

经典例题

[LG6378] Riddle

对树上每个点建立一个 $\rm bool$ 变量取值为 $1$ 表示这个点选

使用 $\rm 2-Sat$ 的通用做法建立为每个点的状态建立两个点 $u$$\lnot u$分别对每个限制考虑

  • 每条边至少有一个关键点则对于一条边 $u-v$$\lnot u$$v$$\lnot v$$u$故连接 $\lnot u\to v$$\lnot v\to u$
  • 每个部分最多有一个关键点则如果 $u$ 被选了那么同一个块中所有点都不能选连接 $u\to \lnot v$ 但是我们发现这样连边是 $\Theta(n^2)$所以前缀和优化连边即可

建好图以后直接跑 $\rm 2-Sat$时间复杂度 $\Theta(n)$

[POI2011] KON-Conspiracy

首先转化题意这道题要求的是将一张无向图划分成一个团和一个独立集的方案数

首先找出一种合法的方案是很容易的是一个裸的 $\rm 2-Sat$ 问题

考虑找出一种方案后统计方案数首先有如下性质

  • 一个团中不可能取出一个以上的点加入独立集因为两点之间必有连边
  • 一个独立集中不可能取出一个以上的点加入团因为两点之间必无连边

所以可以直接分别枚举团和独立集中的每个点交换它们即可

时间复杂度 $\rm \Theta(n^2)$

[北京省选集训 2019] 完美塔防

首先预处理哪些炮台会互相打到若存在则输出 IMPOSSIBLE.

然后发现有如下结论

每个空地最多可以被两个炮台打到
因为每个空地最多在纵横两个方向上被打到若还存在一个则必定会打到其中一个炮台

于是对每个炮台它的纵横情况设为 $0/1$每个空地会加入一个形如 $a~or~b$ 的条件这就变成了经典的 $\rm 2-Sat$ 问题

时间复杂度 $\Theta(Tn^3)$

[HNOI2010] 平面图判定

首先有平面图中的欧拉定理设一张无向连通图点数为 $v$边数为 $e$面数为 $f$则有

$$v-e+f=2 $$

考虑通过对 $e$ 进行归纳证明该式

$e=0$ 时显然成立

若当 $e'=e-1$ 时该式成立我们要证 $v-e+f=1$ 成立只需证添加一条边会使得面数恰好增加 $1$ 而对于这个问题我们可以分类讨论若这条边加在某个面的中间那么其必将这个面分成两半若这条边加在图形外面那么会围出一块新的区域也会使面数恰好增加 $1$

故该式成立

我们进一步探究平面图的性质定义面的度数为与其相邻的面的数量显然对于每条边都会有恰好两个面与其相邻故所有面的度数之和为 $2e$ 又因为每个面至少三条边所以度数不小于 $3$进而有 $3f$ 不大于所有面的度数之和故有 $3f\leqslant 2e$将其带入平面图中的欧拉定理可得

$$e\leqslant 3v-6 $$

于是不满足该式的无向连通图均不为平面图进而可以将 $m$ 限制到与 $n$ 同数量级

我们发现题目给定了哈密顿回路于是考虑以这个环作为中心考虑问题

我么发现对于任意一条边它要么从环内连接要么从环外连接并且如果有两条边 $u-v$$u'-v'$且满足 $u<u'<v<v'$那么它们不能连在同一面于是可以通过这种关系构建 $\rm 2-Sat$ 模型

时间复杂度 $\Theta(Tn)$