2 sat基礎詳解

2022-04-12 01:46:42 字數 2184 閱讀 2271

(大量引用《2-sat解法** -by 華中師大一附中 趙爽》《由對稱性解2-sat問題》

great_influence關於p4782 【模板】2-sat 問題的題解。在此對原作者表示衷心的感謝)

在實際的題目中,限制往往還有除了或以外的別的形式,這些限制也將在這篇文章中討論。 

先討論以下兩類限制的情況:

1、若x=a,則y=b

2、x=a或y=b

由於x、y都是bool變數,值要麼1,要麼0,所以可以通過建有向圖的方式來表示這個題目。對每個bool變數x,都建立兩個點,分別表示x=1和x=0。為了方便,以後的x表示圖中的乙個點(除非x前加「變數」兩字,表示變數),~x表示點x的對應點(即另乙個表示同一變數的點)。圖中有了點,就要考慮邊了。

設x_a (字母大寫以區分上文小寫字母表示內容)為變數x等於乙個數a對應的點。同時下文的『^』表示異或符號。顯然對上面的兩類限制都可以通過連邊實現:

對於第一種限制,要增這樣兩條邊:(x_a,y_b)即變數x=a可推出變數y=b;(y_(b^1),x_(a^1))即變數y不等於b可推出變數x不等於a。

對於第二種限制,就要增這樣兩條邊:(x_(a^1),y_b)即變數x不等於a可推出變數y等於b;(y_(b^1),x_a)即變數y不等於b可推出變數x不等於a。

發現這些邊都是對稱的,即若連了一條邊(x,y),則必會有邊(~y,~x)(注意這裡的字母是小寫的)在同一時間連上。同時也發現這些邊的意義也很好理解,不就是「推出」嘛。並且每種限制所連的兩條邊都很好地將這個限制表示了出來。那麼有了乙個最基本的解決問題的暴力演算法了:從每個變數x開始,若它有標記,則直接看下乙個變數,否則列舉它選1或選0,設選了b,並從相應的點dfs。在dfs過程中標記遍歷過的變數都選什麼(對正向邊則標記為該邊的終點;反向邊則標記為該邊的對應點。是的,這個dfs也要走反向邊,即一切有關係的都要走)。若發現dfs過程中遍歷了一組對應點,即從當前變數x選b可推出某個變數既選1又選0,這顯然是矛盾的,故當前變數不能選b,要選另乙個。若當前變數選1或0都不行,則無解了(這裡用不用讓之前的變數重新選一下,再重新列舉當前變數的取值呢?答案是不用。因為若當前變數要取列舉取1取0,則當前變數肯定與之前變數關係。因為有關係的都被打上標記了。所以之前變數的取值情況是與當前變數獨立的);否則就看下乙個變數:    直到看完所有變數的值後發現仍沒有矛盾,則每個變數列舉的值就是答案;或發現無解情況,就記錄無解資訊後停止就好。

顯然這個演算法是很慢的,時間複雜度可達o(n*m)。除非要求乙個字典序最小的取值方案,否則一般都不用這個演算法。下面介紹乙個更快的演算法:

我們考慮圖的乙個強連通分量。很明顯,如果我們選中強連通分量中的任何一點,那麼該強連通分量中的所有其它的頂點也必須被選擇。所以我們可以先求圖的所有強聯通分量。當我們發現若一組對應點x和~x都在同乙個強連通分量時,即若變數x選1,可推出它應該選0;它選0,可推出它應該選1,這樣的話變數x不管怎麼選都是矛盾的,則該2-sat無解。若沒有這樣的情況,那麼我就叫他「前置合法」了,即已經滿足了有解的前提之一。前置合法後,設原圖為g,縮點後的圖為g',然後,我們把g'中的所有弧反向,得到圖g′′。由於已經進行了縮點的操作,因此g′′中一定不存在圈,也就是說,g''具有拓撲結構。我們把g中所有頂點置為「未著色」。按照拓撲順序重複下面的操作:

1、選擇第乙個未著色的頂點u。把u染成紅色。

2、把所有與u矛盾的頂點(如果存在x,~x∈

,前置合法時,k=1建的邊不會影響強連通分量的對稱性。(因為這條邊的起點與終點不會在同乙個強聯通分量裡)。

證明正確性前先了解幾個定理:

1、2、

3、下面證明一下該演算法的正確性:

一、二、

1、個人認為《2-sat解法**》中有關二、1的證明是不正確的,這裡可以舉出乙個反例:

所以下文給出作者個人的關於二、1的證明:

2、故該演算法是正確的。時間複雜度為o(n)(tarjan為o(n),拓撲排序為o(n),染色為o(n)(染色要注意不染重複的點,否則就可能變成o(n的平方))。故總複雜度也為o(n)(實際上,更準確的說,這裡的n為n*2))

其實還有乙個常數的優化:

故前置合法時必有解

故前置合法時,每個變數選他對應點中拓補序大的點,一定會得到一組解。這樣的話就不用求完拓補序後再染色了。

再仔細考慮一下,發現tarjan的縮點的順序正是乙個反的拓補序,所以可以記錄他tarjan的順序,這樣連拓撲序也不用求了。

**

2 Sat模板詳解

這幾天看了一下2 sat,因為有tarjan以及拓撲排序等等的知識基礎,還是比較好理解的,我看到的有兩個模板,乙個是時間複雜度為o nm 另乙個時間複雜度為o m 但是第二種存在一種侷限,他只是能求解隨機的解,但是如果要是求解字典序最小的解,只能使用第一種解法.我們就用乙個例子來看一下第乙個模板 h...

模板 2 SAT 問題 2 SAT

2 sat 問題 模板 有n個布林變數 x 1 x n 另有m個需要滿足的條件,每個條件的形式都是 x i 為true false或 x j 為true false 比如 x 1 為真或 x 3 為假 x 7 為假或 x 2 為假 2 sat 問題的目標是給每個變數賦值使得所有條件得到滿足。輸入格式...

只有2 SAT不是NPC呢 2 SAT學習筆記

我們舉乙個簡單的例子 機房裡有三位大佬小s,小l,小m和乙個蒟蒻tqr,他們刷題時有不同的要求 因為蒟蒻什麼題都不會做,故不列舉 大佬 要求 小s小l 小m 要求1 不包含數論知識 a 包含數論知識 a 不包含數論知識 a 要求2包含幾何知識 b 包含幾何知識 b 不包含幾何知識 b 要求3不包含圖...