本文只作總結性說明html
2-SAT是k-SAT問題的一種,k-SAT問題在\(k>=3\)時已經被證實是NP徹底問題優化
2-SAT問題定義比較簡單spa
有n個布爾變量\(x_1-x_n\)。給出\(m\)個限制關係,每一個關係最多隻對兩個變量進行限制。求一組取值使得知足全部限制。htm
這裏的限制例如:選\(A\)必選\(B\) 或是 \(A,B\)至少選一個blog
2-SAT問題所構成的圖具備對稱性排序
對於兩個點來講get
即若選\(A\)必選\(B\),那麼選\(B\)必選\(A\)class
根據這種性質,前人總結出了一種方法變量
將一個點\(A\)拆爲\(A,A'\)方法
1.若選\(A\)必選\(B\),那麼從\(A\)向\(B\)連一條邊
2.tarjan縮點(把時間從\(O(NM)\)優化至\(O(n)\))
3.判斷是否\(A'A\)是否在同一強聯通份量中
對於須要輸出方案的題目
4.根據縮完點的圖,建出其反圖
5.對反圖進行拓撲排序
6.根據拓撲排序的順序標記答案
那麼選擇了A就只能選擇B’,選擇了B就只能選擇A’
連邊A→B’,B→A’
那麼選擇了A’就只能選擇B,選擇了B’就只能選擇A
連邊A’→B,B’→A
那麼選擇了A,就只能選擇B,選擇了B就只能選擇A,選擇了A’就只能選擇B’,選擇了B’就只能選擇A’
連邊A→B,B→A,A’→B’,B’→A’
連邊A’→A
\(A'A\)不能同時出現,選\(A'\)必選\(A\),故只能單獨選\(A\)
由簡單到簡單2333