什麼是2-sat呢?就是有一些集合,每個集合中有且僅有兩個元素,且不能同時選取兩個元素,集合間的元素存在一定的選擇關係,求解可行性及可行方案。
1、連邊
2、跑tarjan
3、判可行性,即同一集合中的兩個點是否同屬乙個強連通塊
4、縮點建新圖,連反邊
5、拓撲序,若當前點沒有被訪問過,則選擇該點,不選擇其另外的點
2-sat演算法本身並不難,關鍵是連邊,不過只需要充分理解好邊的概念:a->b即選a必選b。
a、b不能同時選:選了a就要選b',選了b就要選a'。
a、b必須同時選:選了a就要選b,選了b就要選a,選了a'就要選b',選了b'就要選a'。
a、b必須選乙個:選了a就要選b',選了b就要選a',選了a'就要選b,選了b'就要選a。
※a必須選:a'->a。
poj 3683 輸出方案
poj 3678 連邊練習
bzoj 1823 判斷可行性
某不知名字的題目
題意:一開始有一些點與點的關係,問刪除一些點之後,方案是否可行。
分析:刪除點之後,原有的關係的連邊會有所改變,因此對於每刪除一些點,就要重新構圖,跑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 小結
目錄從sat說起布林可滿足性問題 boolean satisfiability problem sat 屬於決定性問題,也是第乙個被證明屬於np完全的問題。此問題在電腦科學上許多領域的皆相當重要,包括電腦科學基礎理論 演算法 人工智慧 硬體設計等等。摘自某百科 如 有三個bool變數,三個人要求的取...
關於2 SAT問題
就是有一些布林變數,然後它們之間有一些關係,比如說某些異或起來等於1,或者某兩個and等於0之類的 要判斷是否無解或找出一組可行解 那麼把每個變數拆成兩個點x和x 代表true和false,選x代表這個變數為true,選x 代表這個變數為false 然後按照上面的關係進行連邊,一條邊x連向y代表選了...