2-SAT问题学习笔记
2-SAT问题
有\(N\)个变量,每个变量有两种可能的取值。给定\(M\)个限制条件,问能否构造出一组答案,使其满足所有限制条件。若能,输出一组答案。
设一个变量\(A_i\)的两种取值为\(A_{i,0}\)与\(A_{i,1}\)。对于所有的限制,均可抽象为:若\(A_i=A_{i,p}(p∈\{0,1\})\),则\(A_j=A_{j,q}(q∈\{0,1\})\)。
于是我们建立一张\(2N\)个点的有向图,其中\(1\)~\(N\)表示\(A_{i,0}\),\(N+1\)~\(2N\)表示\(A_{i,1}\)。满足一则上述条件,相当于在\(i+p×N\)与\(j+q×N\)之间连一条有向边,代表前者能推出后者。另外,由于所有变量都需要赋值,且变量只有两个可能值,故\(A_{i,p}⇒A_{j,q}\)的逆否命题\(A_{j,1-q}⇒A_{i,1-p}\)显然也成立,需要再连一条边。
若有向图中有边\((a,b)\),\((b,c)\),则\(a\)能推出c。利用这个结论,我们可以得到2-SAT问题是否存在解的判定条件:若存在\(∀A_i\)满足\(A_{i,0}→A_{i,1}\)且\(A_{i,1}→A_{i,0}\),则无解;反之有解。它的等价刻画为:对有向图求强联通分量,若\(A_{i,0}\)与\(A_{i,1}\)在同一个强联通分量中,则无解。
注意区别2-SAT问题与并查集扩展域的区别。并查集扩展域中连的是无向边,表示\(P\)与\(Q\)互为充要条件;而2—SAT问题中是\(P⇒Q\),且非\(Q\)\(⇒\)非\(P\)。两个2-SAT问题的限制条件可以取代一个并查集扩展域的限制条件。我们可以说,并查集扩展域是2-SAT问题的一种特殊情况,满足\(A_{i,p}⇒A_{j,q}\)的同时,一定有\(A_{j,q}⇒A_{i,p}\)。从中可以看出,2-SAT模型可以处理并查集扩展域,且能处理更多、更复杂的情况。
应用
例1:Katu Puzzle
仔细分析便可发现,此题已无法用并查集解决。
设节点\(a\)表示\(X_a\)赋值为0,节点\(a+N\)表示\(X_a\)赋值为1。分类讨论每种情况。
1.\(a\) and \(b\) = 0
此时,若a=1,则b=0;若b=1,则a=0。于是连边\((a+N,b),(b+N,a)\)。
2.\(a\) and \(b\) = 1
此时a=b=1,即只能选\(a+N\)与\(b+N\)。若\(a+N\)能到达\(a\)或\(b+N\)能到达\(b\),则一定无解。我们可以简单地连边\((a,a+N),(b,b+N)\)。
3.\(a\) or \(b\) = 0
与2类似,连边\((a+N,a),(b+N,b)\)。
4.\(a\) or \(b\) = 1
与1类似,连边\((a,b+N),(b,a+N)\)。
至于xor,不必多说。
例2:Priest John's Busiest Day
我们将每场婚礼看做一个变量,若在开始时举行仪式,赋值为0;若在结束时,赋值为1。对于两场婚礼\(i,j\),我们可以讨论它们举行仪式的时间的重叠情况,建立2-SAT问题的模型。如\(i_1\)与\(j_0\)重叠,那么连边\((i_1,j_1),(j_0,i_0)\)。
此题难点在于求出变量的取值方案。发现若有边\((A_{i,p},A_{j,q})\)且\(A_i=p\),那么\(A_j=q\)。于是在一个SCC中,只要有一个点被选择,那么剩下所有点也被选择了。于是考虑缩点,得到一张DAG图。再看上述条件,反过来考虑:若一个点的出度为0,那么它就没有指向的点,它的选择对剩下其他点的选择没有影响。那么在有“0出度点”的情况下,我们一定先选择所有0出度点。而当一个点被选择后,所有指向它的边就没有意义了,可以删去,那么又多出了很多0出度点。
于是我们得出一种类似拓扑排序的算法。简便起见,我们设\(opp[x]=x+N\),\(opp[x+N]=x\)。在一张反图上跑拓扑,在一个点的出度更新为0时,判断这个点的opp是否已被选择;若没有,则选择这个点。这种策略一定可以保证先选的点不与后选的点产生冲突。
然而此方法太麻烦。在此基础上,可以进一步简化。观察上面的方法,变量的取值决定于其0节点与1节点哪个在拓扑排序中先跑到。由于Tarjan算法求SCC本身就是基于DFS实现,越靠近搜索树“底部”的点的SCC编号越小。而在反图上跑拓扑,可以保证先到的点更靠近“底部”。于是可以直接比较0节点与1节点所在的SCC编号的大小,取较小的那个。