2-SAT問題 信息學競賽 OI ACM O(m) O(nm)
2-SAT問題
張天翔
blog.csdn.net/hzoi_ztx
[email protected]
前置技能
問題模型
給出n個布爾值組成的序列{Ai} ,給出一些限制,每個限制最多針對兩個元素(故稱爲“2-SAT”),先要求確定A 序列的值以滿足所有限制關係。
問題分析
首先列出7種有意義的限制(其實真正有意義的爲5個),如下:
-1: Ai=1
-2: Ai=0
-3: Ai AND Aj=0
-4: Ai OR Aj=1
-5: Ai OR(NOT Aj)=1
-6: Ai XOR Aj=1
-7: Ai XOR Aj=0
所有可能的限制條件如下
01: Ai=1 有意義
02: Ai=0 有意義
03: Ai AND Aj=1⇔(Ai=1)AND(Aj=1)(兩個限制−1)
04: Ai AND Aj=0 有意義
05: Ai AND(NOT Aj)=1⇔(Ai=1)AND(Aj=0)(限制−1,−2)
06: Ai AND(NOT Aj)=0⇔(Ai=0)OR(Aj=1)⇔(NOT Ai)OR Aj=1(限制−5)
07: (NOT Ai)AND Aj=1⇔限制05
08: (NOT Ai)AND Aj=0⇔限制06
09: (NOT Ai)AND(NOT Aj)=1⇔(Ai=0)AND(Aj=0)(兩個限制−2)
10: (NOT Ai)AND(NOT Aj)=0⇔(Ai=1)OR(Aj=1)⇔Ai OR Aj=1(限制−4)
11: Ai OR Aj=1 有意義
12: Ai OR Aj=0⇔(Ai=0)AND(Aj=0)(兩個限制−2)
13: Ai OR(NOT Aj)=1 有意義
14: Ai OR(NOT Aj)=0⇔(Ai=0)AND(Aj=1)(限制−1,−2)
15: (NOT Ai)OR Aj=1⇔限制13
16: (NOT Ai)OR Aj=0⇔限制14
17: (NOT Ai)OR(NOT Aj)=1⇔(Ai=0)OR(Aj=0)⇔Ai AND Aj=0(限制−3)
18: (NOT Ai)OR(NOT Aj)=0⇔(Ai=1)AND(Aj=1)(兩個限制−1)
19: Ai XOR Aj=1 有意義
20: Ai XOR Aj=0 有意義
21: Ai XOR(NOT Aj)=1⇔Ai XOR Aj=0(限制−7)
22: Ai XOR(NOT Aj)=0⇔Ai XOR Aj=1(限制−6)
23: (NOT Ai)XOR Aj=1⇔限制21
24: (NOT Ai)XOR Aj=0⇔限制22
25: (NOT Ai)XOR(NOT Aj)=1⇔Ai XOR Aj=1(限制−6)
26: (NOT Ai)XOR(NOT Aj)=0⇔Ai XOR Aj=0(限制−7)
實際問題中通常將{Ai} 序列代表n個物體的選與不選,選則對應布爾值爲1。
解決方法
拆點,每個布爾值Ai 拆成兩個點,xi 與yi ,然後選出一個大小爲n 的點集,使得其滿足所有的限制條件(給出的限制條件,以及對應的xiyi 不能同時在集合中),選擇xi 點代表Ai=1 (選擇此物品),選擇yi 點代表Ai=0 (不選擇此物品)。
若要選擇出來一個點集,需要用模型表示限制關係。
建圖,圖中的一條邊<u,v> 表示選擇了u 點以後必須要選擇v 點。
那麼對有意義的七種關係進行建圖如下。
-3: Ai AND Aj=0
兩條邊xi→yj,xj→yi
-4: Ai OR Aj=1
兩條邊yi→xj,yj→xi
-5: Ai OR(NOT Aj)=1
兩條邊xj→xi,yi→yj
-6: Ai XOR Aj=1
四條邊xi→yj,xj→yi,yi→xj,yj→xi
-7: Ai XOR Aj=0
四條邊xi→xj,xj→xi,yi→yj,yj→yi
-1: Ai=1
把yi 刪掉很暴力,所以一條邊yi→xi
-2: Ai=0
把xi 刪掉很暴力,所以一條邊xi→yi
(可以看到限制-6可以由限制-3與限制-4組成,限制-7可以由兩個限制-5組成,故說真正有意義的爲5個)
這樣得到了第一個圖。
算法一
爲了滿足所有的限制條件(給出的限制條件,以及對應的xiyi 不能同時在集合中),可以對每一對未確定的(xi,yi) ,先選其一,並選定對應必須要選的點,如果最後不矛盾,則成功,否則嘗試選另一點,若不矛盾則成功,否則無解。
這樣做正確性顯然,但是時間複雜度O(nm) ,較高。
算法二
思考,這是一個有向圖,而且是“對稱”的(也就是說按照上述方式對每一個限制條件建邊,如果存在xi→xj 必定存在yj→yi ,如果存在xi→yj ,必定存在xj→yi ,如果存在yi→xj ,必定存在yj→xi 等等,這些邊是“對稱”的),如果圖中出現一個環,那麼這個環上所有點必須同時被選或被不選,而且這個環會有與之對稱的一個環(此環上點對應的另一個點在另一個環上,邊的連接也相同但是反向)。既然如此,不如強聯通分量縮點,並且連邊,如果兩個點在不同強聯通分量,則在這兩個強聯通分量之間連有向邊,與原來的邊方向相同,這樣,圖變成了一個拓撲圖,這是第二個圖。此時,如果存在一組(xi,yi) 同時在一個強聯通分量中,顯然無解;如若不然,一定有解,證明略,按一定方法求解。
將強聯通分量稱作Si ,與之對稱的連通分量稱作S′i 。分析圖的性質,對於任意的一對(Si,S′i) ,Si 的所有後代節點(此點通過有向邊連通到的所有點)與S′i 的前代節點(通過有向邊連通到此點的所有點)是“對稱”的。
若選則某個Si 中的點,那麼所有的Si→Sj ,Sj 都要被選擇,而S′i 必定不可選,所有S′i 的前代節點都不可選。那麼每次找到一個未確定是否選擇的Si ,選擇其所有後代節點,並刪除S′i 及其所有前代節點,但每次盲目找一個未被確定的Si 複雜度較高,可以以自底向上的順序進行選擇與刪除,這樣就免去了“選擇Si 的所有後代節點”(只用不斷刪除)。
那麼算法流程圖:
時間複雜度O(m) ,具體實現看例題。
例題
一般2-SAT問題【O(n)】
求字典序最小的方案【O(nm)】
[COGS2443] [HZOI 2016]MC之旅:逃離基友
參考資料
2-SAT問題及其算法
由對稱性解2-SAT問題