第三次学2-SAT了……学一次忘一次……

前置知识:scc->强连通分量

设有n个变量,令i和i+n号节点分别为i和!i。
令c[i]为原图中i节点所在scc的编号。

2-SAT建图后拥有一个性质:
若a->b,则!b->!a
如果a和!a在同一个强连通块中就挂了不考虑。
这时会有一个结论,将某一个强联通块中的点取反之后,那些点不会分散在多个强连通块中。
(a->!a这种形式比较特殊,但依然是成立的,因为不会对强联通分量造成任何影响)

定义选择一个点的意思是让这个变量取这个值。显然在一个强联通分量中,选择任意一个点都可以推出选择其他点。
定义一个强联通分量为真代表选择分量内的所有点。

开始考虑构造。
现在对于原图中的某一个点x,让c[x]和c[!x]拓扑序在前的为假,在后的为真。
这样不会出现从真遍历到假的情况,也就是说这样原图的边是一定满足的,可以不考虑了。

这时矛盾的形式只有一个强连通分量被同时定义了假和真。
根据上面的结论,两个强联通分量是相互映射的,所以连通块内的点要么都是在拓扑序上第一次出现,要么都是在拓扑序上第二次出现。
所以一个强联通分量不可能被同时定义假和真,满足构造。