sat就是satisfiability,適定性,即是否有滿足所有條件的情況。一般來說2-sat問題就是:給定一堆集合,大小為2,每個集合必須且最多取乙個,不同集合間的不同元素有一些約束條件,通常表現為and、or、xor、not等形式,通過進行構圖,跑2-sat演算法解決。
從題目入手
題目大意:一國有n個黨派,每個黨派在議會中都有2個代表,現要組建和平委員會,要從每個黨派在議會的代表中選出1人,一共n人組成和平委員會。已知有一些代表之間存在仇恨,也就是說他們不能同時被選為和平委員會的成員,現要你判斷滿足要求的和平委員會能否創立?如果能,請任意給出一種方案。( poi 0106 )
首先想乙個樸素的東西:
設乙個黨派的兩個代表為a,b,那麼如果1a跟2a有仇,那麼如果選1a的話,就只能選2b了。我們給1a向2b連一條邊,那麼我們暴力的時候,選了點i則要把能走到的其他點全部選掉,假如走回了i,卻是不同的代表,則不合法,例如從1a走回1b。
然後有得標記就標記,如果a不行就試b,兩個都不行就無解(之後解釋)。
時間複雜度o(nm),m邊數,n點數。當然了,這個暴力並非一無是處:可以求字典序最小(大)的方案。
中間插入一段話:1a向2b連一條邊,表示選1a必選2b,等價於給2a向1b連一條邊,代表
先給出只能判斷有無解的高速演算法,之後解釋 :
縮點連邊後tarjan對強聯通分量縮點;把所有邊反向。
判斷可行
如果相同黨派的兩個代表處於相同分量,則不可行,否則可行。
接下來是找一種合法方案。
找矛盾分量
對於乙個分量x,有且只有乙個矛盾分量ant[x],滿足:一對a,b分別出現在兩個分量中。
拓撲排序
強連通分量已經縮成點,排序!
構造方案
按拓撲序訪問點,如果沒有選就選他,
選了x,ant[x]就不能選,並且ant[x]和它能走到的所有分量都要打上「不選」的標記。
沒了。有時間再寫···
2 SAT學習小記
推薦部落格 研究總結 2 sat問題 現在有n個集合,每個集合裡有一些元素。現在要求從每個集合裡選出乙個元素,並且兩兩集合選出的元素有限制 記乙個集合裡最多有k個元素,那麼這個問題稱作k sat問題。k 2即是2 sat問題,是有價值討論的問題。當k 3時,被證明是np完全問題,是無法在多項式複雜度...
2 SAT學習筆記
由對稱性解2 sat問題 2 sat解法 上面兩篇 很清楚的介紹了什麼是2 sat以及一些原理演算法 2 sat問題是圖論中乙個比較有意思的問題,重點是建圖,對於邊的意思,就是如果你選了i,就必須選j。2 sat問題有個很明顯的地方就是對於每個i,i包含兩個點,i表示選第乙個點,i 表示選第二個點,...
2 SAT學習總結
2 sat 圖論演算法 理解 給定乙個布林方程,判斷是否存在一組布林變數的取值方案,使得整個方程值為真的問題,被稱為布林方程的可滿足性問題 sat sat 問題是 np 完全的,但對於一些特殊形式的 sat 問題我們可以有效求解。我們將下面這種布林方程稱為合取正規化 其中稱為文字,它是乙個布林變數或...