1. 程式人生 > >2-SAT學習筆記

2-SAT學習筆記

括號 inline 什麽 class ability 們的 -s 賦值 不知道

快NOIP了我學這個幹什麽。。。

\(2-SAT\)定義

\(SAT\)\(Satisfiability\)的縮寫,意為可滿足性。即一串布爾變量,每個變量只能為真或假。要求對這些變量進行賦值,滿足布爾方程。
例如\((\)\(a\) \(or\) \(b\)\()\)\(and\)\((\)\(a\) \(or\) \(!c\)\()\)\(and\)\((\)\(a\) \(and\) \(c\) \(or\) \(b\)\()\),求解這個問題就是讓你找出一組a,b,c的取值使得這個表達式為真。
而這個問題當一個括號裏有多於2個元素時只能枚舉,是NP問題。\(2-SAT\)就是括號裏只有兩個元素的情況。

解法: 咕咕咕

註意事項:之前在理解的時候有很大一個難關就是不知道如何以及為什麽要對表達式進行轉化(我真菜)。

原因是這樣:我們建的模型是\(a\)\(b\)連一條邊表示選了\(a\)必須選\(b\),即\((a\) \(and\) \(b)\)
而大多數題目中很多要求的形式是\((a\) \(or\) \(b)\) \(and\) \((!a\) \(or\) \(b)\)
這時候就需要轉化: \((a\) \(or\) \(b)=(a\) \(and\) \(!b)\) \(or\) \((a\) \(and\) \(!b)\)
我現在也不知道這個式子有什麽道理,只是對著dalao們的模板推出來的這個式子,並且發現他是正確的。。。

所以我們連邊的時候要從\(a\)\(b\)的反連一條邊,從\(a\)的反向\(b\)連一條邊。

2-SAT學習筆記