浅谈 2-SAT
SAT 是适定性(Satisfiability)问题的简称。一般形式为 k - 适定性问题,简称 k-SAT。而当 \(k>2\) 时该问题为 NP 完全的。所以我们只研究 \(k=2\) 的情况。
而 2-SAT 问题一般指的是,有 \(n\) 个布尔变量 \(x_1,x_2\dots x_n\),现在有若干个二元的运算,是对于 \(x_i,\neg x_i,x_j \neg x_j\) 进行 \(\land,\lor\) 或 \(\oplus\),运算,问是否存在一种分配方式,使得所有的这些运算均为真。
因为它是二元的,所以叫做 2-SAT。
解决这个问题的关键就是将所有的逻辑语句统一,统一成 \(p\to q\) 的形式。即 “如果选择了 \(p\),就必须选 \(q\)”。
这样,我们将所有的 \(p\to q\) 看作有向边,我们可以得到一张有向图。
那么我们可以知道,在同一个强连通分量中的所有点,要么同时选择,要么同时不选择。我们跑 Tarjan 缩强连通分量之后,会得到一个 DAG。
这是无解的条件就很明显:如果存在 \(x_i\) 和 \(\neg x_i\) 在同一个强连通分量之中,则说明无解。然后我们对整张图进行缩成的 DAG 进行拓扑排序,每一个变量选择拓扑序较大的决策即可。
Luogu P4782 【模板】2-SAT 问题
有 \(n\) 个布尔变量,有 \(m\) 条件为 \(x_i\) 为真/假或 \(x_j\) 为真/假。询问是否有合法解,并给出一组构造。
每一个操作形如 \(a\lor b\),相当于 \(\neg a\to b\land \neg b\to a\),建图即可。
[JSOI2010] 满汉全席
有 \(n\) 种食材,每种食材要做成两种食品中的一个,有 \(m\) 个要求,每一个形如至少要有两种食品中的一个,问是否可以满足所有要求。
和上面一道题形式几乎相同。
[HNOI2010] 平面图判定
给定一张图,并给出他的一个哈密顿回路,判断这张图是否可以变成平面图。
根据平面图的定理,可以得到平面图的边数至多为 \(3n+6\) 条,那么对于每一个不在哈密顿回路上的边,它要么在环外,要么在环内。
对于每一对边,暴力判断他们同时在环外或环内是否会有交,如果有,则他们之间会出现 \(x_i\oplus x_j=1\) 的限制,拆成 \(x_i\leftrightarrow \neg x_j\),\(\neg x_i\leftrightarrow x_j\) 即可。
由于这个限制是双向的,可以直接使用并查集维护。
[北京省选集训2019] 完美塔防
不难证明,每一个 . 至多只会被两束合法的激光覆盖,具体的,因为没有任何可以使光线回合的一起,每一个方向至多只会有一条激光,而如果相对的方向都有激光则说明这样的组合是不合法的,因为他们会打到另一个仪器。
所以直接暴搜查询每一个点是否会被哪些光遍历,以及哪些光是合法的这样的操作复杂度是正确的,然后对于每一个位置,都是 \(a\) 或 \(b\) 的信息,直接见图跑 2-SAT 即可。
[NEERC2016] Binary Code
有 \(n\) 个 \(01\) 串,每个串至多有一个位置是不确定的,问是否有一种确定每一个不确定位的方式,使得没有任何一个串是另一个串的前缀。
由于每一个串至多有一个不确定位,相当于是在两种可能中选择,暴力连接所有可能的前后缀是 \(O(n^2)\) 量级的边数,显然无法接受,所有考虑优化建边的过程。
具体的,我们考虑建出Trie树,这样每一个点的前后缀关系都可以在树上轻松表示出来,建两颗辅助的Trie树,一个向叶,一个向心即可,边数是 \(O(\sum |S|)\) 的,再跑 2-SAT 即可。
浅谈 2-SAT的更多相关文章
- 【WebApi系列】浅谈HTTP
[01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...
- 【WebApi系列】浅谈HTTP在WebApi开发中的运用
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
- iOS开发之浅谈MVVM的架构设计与团队协作
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- Linux特殊符号浅谈
Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...
随机推荐
- 深入理解Kafka核心设计及原理(一):初识Kafka
转载请注明出处: 1.1 kafka简介 Kafka 起初是由 Linkedin 公司采用 Scala 语言开发的一个多分区.多副本且基于 ZooKeeper协调的分布式消息系统,现己被捐献给 Apa ...
- Java求一个集合的所有子集
转载请注明出处: 求一个集合的所有子集表示从一个集合当中,任取任意项或不取,所能得到的所有结果,比如有一个集合{a,b,c,d},那么{a,b}, {b, d}等都是它的子集,空集也是它的子集, 一个 ...
- Cortex M3 - NVIC(中断向量控制器)
NVIC-概述 nested vector interrupt control - 内嵌向量中断控制器 传统ARM中断控制在Core的外部,软件接收到中断之后,需要查中断的编号,然后启动相应的中断处理 ...
- Java中内存四区
这里简要说明这四个区域通常用于存储的变量类型: 栈区(Stack): 存放局部变量.方法参数.返回地址等. 变量的生命周期与其所在的方法(函数)的调用周期一致. 堆区(Heap): 主要用于动态分配内 ...
- Vue - 父子级的相互调用
父级调用子级 父级: <script> this.$refs.child.load(); 或 this.$refs.one.load(); </script> 子级: < ...
- HTTP 1.1响应码
HTTP 1.1响应码 响应码和信息 含义 HttpURLConnection 1XX 信息 100 Continue 服务器准备接受请求主体,客户端应当发送请求主体:这允许客户端在请求中发送大量数据 ...
- MyBatis05——一对多和多对一处理
多对一处理 1.数据库表的设计 CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRI ...
- 开启大页与否对CacheBuffer的影响的学习
开启大页与否对CacheBuffer的影响的学习 背景 最近遇到数据库压力较高的场景. 原厂工程师到位后修改了几个参数(自己以为参数没问题) 然后最近一周环境就比较正常了. 这个地方很打脸, 自己没有 ...
- idb单副本时-TiKV节点损坏后有损数据恢复的方法
Tidb单副本时-TiKV节点损坏后有损数据恢复的方法 背景 UAT环境下,为了减少存储. 搭建了一套单副本的TiDB集群 但是随着数据量的增多, UAT上面的数据可以丢失,但是表结构等信息是无法接受 ...
- [转帖]JMeter InfluxDB v2.0 listener plugin
https://github.com/mderevyankoaqa/jmeter-influxdb2-listener-plugin Support my Ukrainian Family ️ Lik ...