2-sat
Posted 拉风女王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2-sat相关的知识,希望对你有一定的参考价值。
算法讲解
-
算法用途:
就是2判定性问题,是一种特殊的逻辑判定问题。有n个集合,每个集合里有两个元素且必须选一个(这里我们用\\(A_i\\),\\(A_i\'\\)表示),再给出若干条限制条件,判断是否有解或者输出解。 -
算法流程
建边:只建必须满足该逻辑条件的边。
性质1:边满足传递性->原图满足对称传递性->图中的环分别对称
显然一个环内满足传递性,因此该环内的点判定性相同,我们将该图缩点(这里我们由A->S)。
性质2:新图中,同样具有对称传递性(同样反图也满足)。
性质3:若问题无解,则必然存在\\(A_i\\), \\(A_i\'\\) ,使得\\(A_i\\), \\(A_i\'\\)属于同一个环。(此性质可以解决很多只询问判定性的问题)
性质4:对于任意一对\\(S_i\\), \\(S_i\'\\)的后代节点与\\(S_i\'\\)的前代节点相互对称。
如果选择\\(S_i\\),那么对于所有\\(S_i\\) \\(S_j\\),\\(S_j\\)都必须被选择。(性质2)
而\\(S_i\'\\)必定不可选,这样\\(S_i\'\\)的所有前代节点也必定不可选(将这一过程称之为删除)。
因此,为了方便我们先建\\(S\\)的反图,用拓扑排序,传递不可选标记(即删除)即可。
以上是关于2-sat的主要内容,如果未能解决你的问题,请参考以下文章
2-CNF SAT如何在P中,而3-CNF SAT在NPC中?