概念
SAT的全稱是Satisfiability。
Satisfiability,可滿足性。
SAT問題就是要確定一個滿足所有條件的方案或判斷某方案是否合理。
舉個栗子:
有
現在這
這就是一個典型的SAT問題。
國家相當於條件,不同的代表相當於不同的情況。
上述的就是M-SAT問題,因爲每個條件有M種情況。
同理,當每個條件都只有兩種情況時,就是2-SAT問題。
爲什麼只研究2-SAT而不研究M更大的SAT問題呢?
因爲當
算法
很簡單,將有必選關係的點連邊,然後枚舉每個點跑一遍看有沒有衝突就行了。
講得太簡單了?
那我再詳細點:
還是像上面的那個問題,但規定
若
連好邊之後就枚舉每個還沒確定代表(情況)國家(條件),隨便選一個代表(情況),然後沿必選關係往下走,如果發現有衝突(訪問某個國家的另一個代表也是必選的),就退出,換另一個代表試。如果兩個代表都不行,
那你可能要問了,爲什麼是換這個國家的代表,不換之前選過的?
其實不難看出,這個圖是對稱的,所以換那個都無所謂(實在還不懂就自己建個圖看一看,推一推)。
例題:UVaLive 3211(這裏題解)