2-SAT


\(2-SAT\)

  • 定義:給出\(n\)\(0/1\)選擇,其中部分\(0/1\)選擇會有沖突,求一組可行的選擇
  • 為方便敘述,我們把第\(i\)\(0/1\)選擇表示為\(a_{i,0},a_{i,1}​\)
  • 思路:
    • 首先觀察性質,\(a_{x,t},a_{x',t'}\)沖突意味着兩者只能選其一。有了這個性質,我們進一步發現\(a_{i,0},a_{i,1}\)其實也是沖突的。也就是說我們可以把 \(0/1\)選擇 和 沖突 全看成 \(0/1\)選擇
    • 然后我們來看 $0/1 $選擇 的性質
      • 如果 每個限制 都是在兩者中選其一,不難想到我們可以建立兩個相互對立的點來表示限制。
    • 如果我們將這些對立的點對應 用邊相連,我們不難發現這是一個二分圖,並且我們要找到一個點集\(S\),使得點集\(S\)中的點相互沒有連邊,且\(|S|\geq n\)
    • 我們可以發現這是個裸的最大獨立集問題,利用\(dinic\),我們可以得到一個時間復雜度為\(O(m\sqrt{n})\)的算法,其中\(m\)為限制條數(二分圖中邊數)
    • 但這個算法依然不是很優秀,我們繼續思考。
    • 現在我們連的邊代表 限制,這樣的邊並不能滿足圖論中最基礎的性質:傳遞性。例如:對於\((a,b),(b,c)\)兩條邊,我們只能得知\(a,b\)不在一個集合,以及\(b,c\)不在一個集合,但我們不能得到\(a,c\)一定在同一個集合,因為\(c\)可能還有其他限制,導致\(c\) 不選 比 選 更優。
    • 因此我們考慮重新連邊,我們把目光重新聚焦到 \(0/1\)選擇 上,我們不難發現如果我們確定了\(a_{i,0},a_{i,1}\)其中一個不選,那么另一個一定要選。那么我們就可以把先前的圖重構,即 對於\(\forall (a_{x,y},a_{z,w})\in E\)連接\((a_{x,y},a_{z,w'})\),若\(w=1\),則\(w’=0\);反之亦然
      • 注意:同一個$0/1 \(選擇中的\)a_{x,0},a_{x,1}$之間不再需要連邊,因為這種邊在新圖中以自環的形式存在,因此不再在之后的操作中不再考慮。
    • 這樣我們的邊\((u,v)\)的實際意義為選了\(u\),就必須選\(v\)。這樣便就滿足傳遞性了。那這樣有什么好處呢?
    • 我們可以注意到,對於有向圖中的一個強連通分量(即對於強連通分量中的每個點都能將自己\(0/1\)選擇的狀態傳遞給強連通分量中的任意一個點),因此強連通分量中每個點的狀態都相同。
    • 但是如果同一個\(0/1​\)選擇\(a_{x,0},a_{x,1}​\)都在同一個連通塊,即同時都要選 或 同時都不選,就會產生矛盾
      • 這時已經沒有邊\((a_{x,0},a_{x,1})\),只有邊\((a_{x,0},a_{x,0}),(a_{x,1},a_{x,1})\)
    • 那么對於全圖,我們可以用\(tarjan\)來將強連通分量縮點,在用\(topu\)排序,求出一組可行方案


免責聲明!

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



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