2-SAT問題的方案輸出


2-sat 推薦學習資料:

 

伍昱的2003年IOI國家集訓隊論文《由對稱性解2-sat問題》

 

論文鏈接:https://wenku.baidu.com/view/31fd7200bed5b9f3f90f1ce2.html

 

注:

本博文只分析如何輸出一組可行解,請讀者確保已學習了判斷是否有解

本人水平不高,若有分析不得當之處,歡迎指出

 

 

法一、tarjan+構建反圖+拓撲排序

在原圖tarjan縮點后得到的有向無環圖的反圖上拓撲排序

邊拓撲邊干兩件事兒:

1、選擇當前棧頂所代表的問題

2、刪除與棧頂問題相對立的問題,刪除它在反圖上的后繼問題

 

個人理解:

 

1、一般情況下,2-SAT的構圖是對稱的,(原因去看論文)

設i與i'為一對相互對立的問題

若在原圖中存在下面的左邊的連通子圖則必存在右邊的連通子圖

 

非一般情況比如NOI2017 Day2 T1 游戲,

輸入數據會使存在邊i-->i',但不一定存在邊i'-->i 

即給出的約束條件使原本就設定的對立問題 再連邊

 

2、在原圖中一條邊u-->v代表着如果選擇問題u則必須選擇問題v

而選擇了問題v不一定要選擇問題u

在實現的時候,如果在反圖上進行拓撲排序,

反圖中入度為0的點,對應着原圖中出度為0的點,它在原圖中沒有后繼問題

相當於省去了在原圖中拓撲排序的還要選擇它所有的后繼問題

 

3、在原圖中一條邊u-->v代表着 如果不選v,則一定不選u

 

棧頂問題的對立問題一定不能選,所以原圖中還要刪除對立問題的所有前驅問題

 

對應到反圖中就是后繼問題

在具體實現的時候,我們可以使這些棧頂對立問題的后繼問題永遠不能入棧

不刪除棧頂對立問題的出邊即可

 

 

法二:tarjan

tarjan縮點時會給點重新編號

對於一對相互對立的問題,誰的新編號小就選誰

 

此方法對於非對稱圖也適用

 

反圖上在拓撲排序中選擇,等價於

原圖(縮點后的樹)上 從葉子節點開始,自底部向上選擇的過程

而tarjan縮點重標號也是從葉子節點往上

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM