2-SAT问题
-(-1).前置知识
-
逻辑运算符及逻辑运算规则
-
拓扑序和拓扑排序
-
tarjan算法与有向图的连通性(强连通分量)
-1.SAT 问题及 2-SAT 问题的定义
SAT 问题,全称为 Satisfiability 问题,中文翻译为可满足性问题,一般形式为 k-可满足性问题,简称 k-SAT 问题。
给定
当每个
2-SAT 问题就是SAT问题中
举个例子
XX教练收了五个学生,每个学生都学过OI,码风也都不相同。现在XX教练需要写一份每个学生看了都顺眼的代码,也就是满足每个人的码风其中一个习惯。XX教练很懒,所以来问你。每个人的码风如下:
-
第一个人
-
1.宏定义long long
-
2.压行
-
-
第二个人
-
1.大括号不单独用一行
-
2.用万能头
-
-
第三个人
-
1.宏定义long long
-
2.不用万能头
-
-
第四个人
-
1.大括号单独用一行
-
2.不压行
-
-
第五个人
-
1.不压行
-
2.不用万能头
-
我们不难发现,宏定义long long、不压行、大括号不单独用一行就是一组合法的解,并且解不限于此。
-2.2-SAT问题的解法
我们分析一下上一个部分的例子。
一共有四种习惯,分别是宏定义long long、压行、大括号单独用一行、用万能头。我们可以把它们看作四个变量
五个约束条件可以表示成一个
观察一下这些约束条件。我们拿第一个约束条件为例,宏定义long long或压行。我们稍微修改一下,如果我们不宏定义long long的话,那是不是就必须压行了呢?抽象一点,如果一个条件
于是我们可以将指向性转化为一条有向边,由
把
我们继续来看上面那个例子,将它按照这种规则建好的图是这样的
如果有一个变量的两种状态
参考文章
本文作者:Luckies
本文链接:https://www.cnblogs.com/Luckies/p/2-SAT.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步