2-SAT 小记
前言
一些约定: 表示逻辑或, 表示逻辑与, 表示 取 , 表示 取 。
2-SAT
就是形如 的问题。
假如有 个这种条件,让我们同时满足呢?
也就是 。
求解
对于一个问题,如果 满足条件, 可以满足或不满足。这是“正”的看法。
假如反过来呢?如果 不满足条件, 就必须满足条件,同样的,如果 不满足条件, 就必须满足条件。只要满足这个限制,就是合法解。因为带有方向性,并且还是递归性质的,把它用有向图表示出来。以下设 。
考虑把 拆成 ,分别表示取 ,取 。那么图长这样:
接下来也是一个例子:
我们会发现,在一个强连通分量中,点是可以互相确定的。因为 只能在 中任选其一,如果 和 在一个强连通分量中,肯定就是无解的。类似地, 如果能到达 ,说明答案肯定是 而非 ,否则会产生矛盾。因此,我们可以求出一组解,问题被我们转换为判断两点间的连通关系。
可以缩点,在 DAG
上拓扑排序。事实上,并不需要真正的拓扑排序,缩点算法已经算出了拓扑序。
以我用的 Kosaruju
举例子。每次找强连通分量的时候,都是还没有缩的,拓扑序最小的点,缩成的强连通分量序号也就是拓扑序了。
讲到这里,你是不是觉得和差分约束挺像的?都是一个图论建模,再通过图论算法求解的过程。
题目
P4782 【模板】2-SAT
P4171 [JSOI2010] 满汉全席
这两题就是板子题。
P6378 [PA2010] Riddle
[ABC210F] Coprime Solitaire
P3513 [POI2011] KON-Conspiracy
本文的部分图片来自 super蒟蒻 的 PPT,给你发好人卡 ^_^ 。
(*≧ω≦)