外观
有向 2-SAT
类型
有数组 bool a[N],给定 m 个约束条件 ax=p⟶ay=q。
解法
仿照 无向 2-SAT:
我们引入一个概念“命题”,命题“ax=b”简记为 (x,b),所有命题组成了图上的点。
接下来,对于每个约束 P→Q,将 P→Q,¬Q→¬P 连边,成为一个有向图。
对于 (x,0) 和 (x,1),有如下可能的关系:
- ax=0⟷ax=1
无解。可以用强连通缩点判断。 - ax=p⟶ax=¬p
解为 ax=¬p,可以用缩点后的拓扑序判断。 - 不连通
任选一个。
引理
Tarjan 算法所求的强连通分量的顺序是缩点图的一个拓扑序的反序。
用缩点图的 dfs 返回序什么的,懒得证了。
总之,建完图 tarjan 缩点,然后对于每对虚点,选强连通分量的顺序最小的一个,如果相等则无解。