1. 程式人生 > >2-SAT問題相關演算法與題目講解(O(n*m)與O(m))

2-SAT問題相關演算法與題目講解(O(n*m)與O(m))

2-SAT問題 資訊學競賽 OI ACM O(m) O(nm)

2-SAT問題

張天翔

前置技能

  • 拓撲排序
  • 基本邏輯運算
  • 強聯通分量

問題模型

給出n個布林值組成的序列{Ai},給出一些限制,每個限制最多針對兩個元素(故稱為“2-SAT”),先要求確定A序列的值以滿足所有限制關係。

問題分析

首先列出7種有意義的限制(其實真正有意義的為5個),如下:

-1: Ai=1
-2: Ai=0
-3: AiANDAj=0
-4: AiORAj=1
-5: AiOR(NOTAj)=1
-6: AiXORAj=1
-7: AiX

ORAj=0

所有可能的限制條件如下

01: Ai=1 有意義
02: Ai=0 有意義

03: AiANDAj=1(Ai=1)AND(Aj=1)(1)
04: AiANDAj=0有意義
05: AiAND(NOTAj)=1(Ai=1)AND(Aj=0)(1,2)
06: AiAND(NOTAj)=0(Ai=0)OR(Aj=1)(NOTAi)ORAj=1(5)
07: (NOTAi)ANDAj=105
08: (NOTAi)ANDAj=006
09: (NOTAi)AND(NOTAj)=1(Ai=0)AND(Aj=0)(2)
10: (NOTAi)AND(N

OTAj)=0(Ai=1)OR(Aj=1)AiORAj=1(4)

11: AiORAj=1有意義
12: AiORAj=0(Ai=0)AND(Aj=0)(<