2-SAT

ouyu69 发布于 5 天前 4 次阅读


什么是 问题

给出 个变量 ,每一个变量只能取 ,给出 个条件,如 就是求满足这 个条件的一组解。


逻辑关系

根据逻辑关系,我们就可以把每一组条件进行转化,设每一组条件中的第一个是 ,另一个是 ,那么 不成立 一定成立,并且 不成立 一定成立 。

image-20250218210008636


拆点建图

我们把每一个变量看作一个点,把 个点拆成 个点, 把 拆成
建图连有向边,例如对于条件

可以表示为从 连接一条有向边 。 (表示取反)
可以表示为从 连接一条有向边 。


Tarjan 缩点

  1. 如果 在一个 内, 说明无解,因为不能同时取 1 和 0 ;
  2. 否则一定存在可行解。

构造可行解

如果有 ,哪那么就选择 , ;
如果有 ,哪那么就选择 , ;
蕴含关系具有传递性,选择后者,冲突性更小。

Tarjan 缩点后我们得到的是拓扑排序
因为先访问的节点后出栈,后出栈的节点SCC编号就大

所以如果 , ;
所以如果 , ;

我打算法竞赛,真的假的。
最后更新于 2025-04-01