关于 2-SAT 的方案构造

news/2024/9/23 16:01:20/文章来源:https://www.cnblogs.com/nkxjlym/p/18427187

基本思想是按某种顺序为每一对未确定的 \((a,\neg a)\) 确定一个合法的点并将其后代加入方案。如果本次选择了 \(a\),其合法等价于之后选到的 \(a\) 的后代不会同时包含某个点对\((b,\neg b)\)。其可以细分为:①之后选到的 \(a\) 的后代不包含先前已被加入到方案的点的反面,这里所说的一个点的反面指其所在点对的另一个点。② \(a\) 的后代不同时包含未被选过的点对(也不包含 \(\neg a\))。

在进行强连通分量缩点后,我们知道如果 \((a,\neg a)\) 存在于同个分量内,则一定无解。下面我们证明一个命题:只要没有 \((a,\neg a)\) 存在于同个分量内,就一定有解。之后的讨论都在没有 \((a,\neg a)\) 存在于同个分量内的情况下进行。

2-SAT 的构图是对称的,即如果存在 \(a\to b\) 的边,则必然存在 \(\neg b\to \neg a\) 的边。此处的边可以进一步泛化为可到达关系。因此有一个结论:当为 \((a,\neg a)\) 确定一个点加入方案的时候,不需要考虑这次选择可能会对先前已经被加入的点及其所在的点对造成的影响。即,当前的每一对未确定点对的点均满足①。

这是因为,一个点被加入方案时,会把它的所有后代全部加入方案,现在我们既然在确定选 \(a\)\(\neg a\),这说明两者皆没有被选过,即两者都不会是先前选过的点的后代,由对称性,这两者也不会是先前选过的点的反面的前代,故选择这两者中的任意一方都不会强制选到先前的点所在点对的另一个点。所以,如果我们选了 \(a\) 后,只要 \(a\) 满足 ②,这个 \(a\) 就一定合法,不用考虑后效性。

当现在考虑到点对\((a,\neg a)\) 时, \(a\) 不合法等价于存在这样一个关系 \(a\to b \and a\to \neg b\),由对称性,这进一步等价于 \(a\to \neg a\)。由于 \(a\)\(\neg a\) 不在同一分量内,所以一定不存在 \(\neg a \to a\)。这引出了第二个结论:如果 \(a\) 不满足②,\(\neg a\) 一定满足②。综合上面两个结论,每个点对中至少有一个点①②同时满足,这就证明了命题。

上述的讨论启发我们一种构造:每一轮找到一个未选择的点对,如果存在一条边(或可达关系)则选择边的终点,如果不存在边则随意选择一个点加入方案,并接着加入所有后代节点。这个构造可以覆盖所有的解,不过求一个解的复杂度还较高,是 \(O(nm)\) 的。

我们可以进一步简化构造。考虑点 \(a\) 的拓扑序 \(t_a\),对于 \(a\) 的所有后代 \(b\),有 \(t_a<t_b\)。并且,每个 \(b\) 对应的 \(\neg b\) 都是 \(\neg a\) 的前代,\(t_{\neg a}>t_{\neg b}\) 。因此,我们对每个点对选择拓扑序更大的那个点 \(a\),就会有 \(t_{\neg b}<t_{\neg a}<t_a<t_b\)\(a\) 的后代 \(b\) 在自己的点对中也是拓扑序更大的那个,免去了枚举后代节点的过程,可以做到真正的 \(O(n+m)\)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/802242.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌发布新 RL 方法,性能提升巨大;苹果前设计总监正与 OpenAI 合作开发 AI 设备丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的会议」,但内容仅代表编辑的…

文件上传日志包含详解与CTF实战

1. 日志简介 1.1 日志介绍 日志是记录系统或应用程序运行时事件的文件。这些记录可以包括错误信息、用户活动、系统性能指标等,帮助开发者和管理员监控和排查问题。 日志通常会记录多种内容,包括:时间戳:事件发生的具体时间。 用户代理(UA)头:浏览器或客户端的类型和版本…

一位架构师的自述:在尚未踏入的世界成为你自己

这是我参与创作者计划的第1篇文章我叫艾佳,工作经验14年,编程经验30年。 我来自智能平台部,负责标签平台、标签圈人、标签选品、EasyData、算法数据流的架构工作。 致力于批量计算、流式计算、交互式计算的通用化数据应用构建,降低大数据计算的使用门槛。 在此,我跟大家分…

数据结构 - 概述及其术语

数据结构是数据管理和存储的格式,包含物理结构、逻辑结构和数据运算三要素。物理结构关注数据如何存储,逻辑结构关注数据如何组织,数据运算关注数据处理。将深入学习九类数据结构。经过上一章节《数据结构与算法之间有何关系?》的阐述,相信大家对数据结构多少有了点了解,…

DM(达梦数据库基本操作)

1、创建用户 XTF 密码为 XTF123321 SQL> CREATE USER XTF IDENTIFIED BY "XTF123321";2、权限 (1)--给用户建表权限 SQL> GRANT CREATE TABLE to XTF;总共1个语句正依次执行...[执行语句1]: GRANT CREATE TABLE to XTF; 执行成功, 执行耗时7毫秒. 执行号:10322…

PWA入门:手把手教你制作一个PWA应用

根目录创建 manifest.json{"name": "我是pwa","short_name": "pwa是我","start_url": "/", //启动页面,如果首页是https://www.abc.com/,则直接用“/”即可"display": "standalone","ba…

南沙C++信奥老师解一本通题 1281:最长上升子序列

​【题目描述】一个数的序列bibi,当b1<b2<...<bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1,a2,...,aN),我们可以得到一些上升的子序列(ai1,ai2,...,aiK),这里1≤i1<i2<...<iK≤N。比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如…

css使用@media响应式适配各种屏幕的方法示例

定义和使用 使用 @media 查询,你可以针对不同的媒体类型定义不同的样式。 @media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的。 当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。 PC端设备…

多智能体协同控制(1)

引言 多智能体系统协同控制算法起源于计算机领域关于分布式计算的研究,后由于数学家们的强势加盟,控制领域的研究一度占领高地。随着人工智能的发展,以多智能体强化学习为代表作的计算机领域专家又重回巅峰。 目前,每年多智能体相关的论文的都浩如烟海,成就了一批手持屠龙…

Axure原型设计:多层级动态表格

多层级表格又成为树形表格,是在后台常用的一种表格形式,当表格数据存在多层级关系是,可以通过多层级表格,从而更加清晰的呈现数据内容,帮助人们更好地理解和分析数据之间的关系,从而更加有效地传递信息。 所以今天作者就教大家怎么在Axure里制作多层级动态表格,包括展开…

frp内网穿透 宝塔部署服务端、客户端教程

宝塔部署教程链接:https://blog.csdn.net/m0_57944649/article/details/140693257 frp官方下载链接:https://github.com/fatedier/frp/releases一、部署服务端1、上传好文件后解压2、进入解压好了的文件夹“frp_0.58.1_linux_amd64”中,找到文件“frps.toml”,双击打开: …

建立数据库连接时出现错误:原因与解决方案

建立数据库连接时出现错误的原因可能有很多,以下是一些常见的原因及其解决方案: 原因登录信息错误:账号、密码、服务器名称或数据库名称不正确。网络问题:客户端与数据库服务器之间的网络连接不稳定或中断。数据库服务未启动:数据库服务没有运行,或者在尝试连接时服务停止…