2-SAT

概念

SAT的全稱是Satisfiability

Satisfiability,可滿足性。

SAT問題就是要確定一個滿足所有條件的方案或判斷某方案是否合理。

舉個栗子:

N 個國家,每個國家有M 名代表,其中一些國家的一些代表有衝突。

現在這N 個國家要召開會議,每個國家要派一名代表,且被派出的代表兩兩間沒有衝突,求一個可行的方案。

這就是一個典型的SAT問題。

國家相當於條件,不同的代表相當於不同的情況。

上述的就是M-SAT問題,因爲每個條件有M種情況。

同理,當每個條件都只有兩種情況時,就是2-SAT問題。

爲什麼只研究2-SAT而不研究M更大的SAT問題呢?

因爲當M3 時,這是NP完全問題

算法

很簡單,將有必選關係的點連邊,然後枚舉每個點跑一遍看有沒有衝突就行了。

講得太簡單了?

那我再詳細點:

還是像上面的那個問題,但規定M2 (不是2就不是2-SAT問題)。

A 國的代表A1B 國的代表B1 有衝突,不難發現,如果國派的是A1 ,那國只能派B2 ,所以就在A1B2 間連一條有向邊從A1 指向B2 ,表示選A1 就必選B2 。同理,選B1 必選A2 ,這就是必選關係。

連好邊之後就枚舉每個還沒確定代表(情況)國家(條件),隨便選一個代表(情況),然後沿必選關係往下走,如果發現有衝突(訪問某個國家的另一個代表也是必選的),就退出,換另一個代表試。如果兩個代表都不行,

那你可能要問了,爲什麼是換這個國家的代表,不換之前選過的?

其實不難看出,這個圖是對稱的,所以換那個都無所謂(實在還不懂就自己建個圖看一看,推一推)。

例題:UVaLive 3211(這裏題解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章