關於2 SAT問題

2021-08-14 02:25:58 字數 706 閱讀 3444

就是有一些布林變數,然後它們之間有一些關係,比如說某些異或起來等於1,或者某兩個and等於0之類的

要判斷是否無解或找出一組可行解

那麼把每個變數拆成兩個點x和x』,代表true和false,選x代表這個變數為true,選x』代表這個變數為false

然後按照上面的關係進行連邊,一條邊x連向y代表選了x就必須選y

同時每一組x和x』只能有乙個是選的,因為乙個變數不可能同時是兩個值

那麼無解的情況就非常顯然了,只要有一組對應點x和x』在同乙個強聯通分量內就無解

那麼如何找可行解?

如果這個圖是乙個dag,那麼可以直接進行dfs染色,判斷是否矛盾

否則tarjan縮強聯通分量,然後將新圖的邊反向,按照拓撲逆序乙個個做。

現在一條邊(y,x)的意義就變成了選了x必須選y,那麼不選y就必須不選x(逆否命題)

假設這個點還沒有被染色,那麼就選它,然後將這個塊內點的對應點及他們出邊連向的點設為不能選

正確性請自行理解

這裡有乙個tips,如果原來的2-sat是對稱的

(即對於任意兩個變數的四個點x和x』,y和y』。如果x向y有一條邊,都有y』向x』有連邊(x』向y、x向y』,x』向y』情況同理),那麼這個2-sat問題就是對稱的)

那麼可以發現乙個強聯通分量內的點,它們的對稱點一定也都在乙個強聯通分量內

那麼只需要記錄每個強聯通分量的對應聯通分量即可,就不需要記錄所有出的對應點了

模板 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 問題

2 sat問題主要解決的是一類二取一的問題.做法就是先建圖,然後跑tarjan,然後就判斷正負是否衝突,假如有衝突,就說明無解,否則就判斷哪個的序號大.話說我也不知道為什麼序號大就代表1.題幹 題目背景 2 sat 問題 模板 題目描述 有n個布林變數x1x 1x1 xnx nxn 另有m個需要滿足...

2 SAT 問題學習 模板

首先來看這樣一道題 gym 101201f illumination two sat 題目鏈結 題意 乙個n n的房子,有很多燈,每個格仔只能被上下方向照一次 左右方向照一次,每個燈可以選擇上下或是左右照,照明長度以自身位置為中心,占用2 r 1個格仔。問能否安排一種方案,使所有格仔滿足條件。析 典...