介绍
2-SAT是一个非常简单的东东,但是网上很多的资料都把这个玩意写得无比复杂。
可能这就是详细把,由于我太菜了,只会记结论。
SAT 是适定性(Satisfiability)问题的简称。一般形式为 k - 适定性问题,简称 k-SAT。而当 k>2 时该问题为 NP 完全的。所以我们只研究 k=2 的情况。
正文
所以说了怎么多东东,2-SAT到底是什么鬼。
其实就是给你很多的两两限制条件,然后要求出某种方案使得能够满足这所有的限制条件。
举例子就是:
当然,这个例子极其智障。根本看不懂。
比如说,有两个人要派一个人去取钱,可以同时去,但是必须有一个人去。
那么我们就可以看到有3种情况:
- 两个人都去。
- 其中一个人不去,那么意味着另一个人必须去。
- 两个人都不去(显然不行)
那么上面这3中情况中,能产生限制条件的是第二种情况。
那么设(A)去的状态为(a),不去的状态为(a^{-1})。
设(B)去的状态为(b),不去的状态为(b^{-1})。
那么可以用一条有向边来描述这个限制条件:
(a^{-1}->b)则表示(A)不去,则(B)必须去。
(b^{-1}->a)则表示(B)不去,则(A)必须去。
这样若有众多的限制条件,就可以构造出一个有向图,那么原问题就转化成一个图上的问题,于是各种tarjan之类的算法就可以往上面套了。
听着还是挺简单的,但分析还是有困难的。
那就看例题!
例题
学习资料:
https://oi-wiki.org/graph/2-sat/
https://www.cnblogs.com/cjjsb/p/9771868.html
https://blog.csdn.net/jarjingx/article/details/8521690