码迷,mamicode.com
首页 > 其他好文 > 详细

2-sat

时间:2021-05-24 12:08:41      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:math   拓扑   strong   输出   判断   节点   问题   就是   不可   

算法讲解

  • 算法用途:
    就是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

标签:math   拓扑   strong   输出   判断   节点   问题   就是   不可   

原文地址:https://www.cnblogs.com/bestime/p/14773143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!