2-SAT学习小计

介绍

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之类的算法就可以往上面套了。
听着还是挺简单的,但分析还是有困难的。
那就看例题!

例题

【WC2016模拟】废水回收

学习资料:
https://oi-wiki.org/graph/2-sat/
https://www.cnblogs.com/cjjsb/p/9771868.html
https://blog.csdn.net/jarjingx/article/details/8521690

posted @ 2020-08-12 21:06  RainbowCrown  阅读(120)  评论(0编辑  收藏  举报