算法用途:
就是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\)的反图,用拓扑排序,传递不可选标记(即删除)即可。
原文:https://www.cnblogs.com/bestime/p/14773143.html