【2-SAT】

具體推薦先看這個《由對稱性解2-SAT問題》算法合集之《由對稱性解2-SAT問題》 

再看趙爽的2-SAT解法淺析 

看完了就基本明白2-SAT是怎麼一回事,說白了就是約束!而做這種題的關鍵是建圖!其他的就套模板,什麼強連通縮點,拓撲染色。。。

下面就具體以poj兩道題爲例說說,poj3683是輸出具體方案,poj2723是輸出方案數

算法流程:

1.構圖
2.求圖的極大強連通子圖
3.把每個子圖收縮成單個節點,根據原圖關係構造一個有向無環圖
4.判斷是否有解,無解則輸出(退出)
5.對新圖進行拓撲排序
6.自底向上進行選擇、刪除(具體實現時可以先反向建圖變成一般的自上向下拓撲),拓撲的同時可以染色求解
7.輸出

總之:如果a與b矛盾,則建邊(a,b');

注意:2-SAT每條邊的關係都是確定的,例如i->j,取i後就必須取j,好好體會體會

2-SAT問題

此類問題理解合取式的含義就不難

POJ 2723 - Get Luffy Out(中等)
http://blog.csdn.net/leolin_/article/details/6680144
POJ 2749 - Building roads(較難)
http://blog.csdn.net/leolin_/article/details/7215886
解法:二分 + 2-SAT判定

POJ 3207 - Ikki's Story IV - Panda's Trick(基礎)
http://blog.csdn.net/leolin_/article/details/7215850
解法:簡單的2-sat,不過其他方法更快

POJ 3648- Wedding(中等)
http://blog.csdn.net/leolin_/article/details/7215359
解法:用2-sat做會比較有意思,但是暴搜照樣0ms

POJ 3678 - Katu Puzzle(基礎)
http://blog.csdn.net/leolin_/article/details/7215871
解法:直接按合取式構圖驗證就行了

POJ 3683 - Priest John's Busiest Day(中等)
http://blog.csdn.net/leolin_/article/details/6680093
解法:n^2枚舉點之間的相容性構圖,求解2-SAT


















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