首页 > 编程语言 >[算法] 2-SAT简记

[算法] 2-SAT简记

时间:2024-08-12 14:27:40浏览次数:4  
标签:拓扑 算法 简记 满足要求 情况 引理 可以 SAT

真的是

2-SAT

$ 2-SAT $ 用于求解一个变量只有两种情况的适应性问题(就是有没有解以及输出一种方案);

其实可以类比二分图最大匹配(但其实两者的差别还是很大的);

算法流程

对于每一个变量,我们都有两种情况,$ true $ 和 $ false $;

而题目中给我们的,是形如 {$ A = true / false $ 或 $ B = true / false $} 的若干个二元组,问是否能够全部满足;

如题:Luogu P4782 【模板】2-SAT

考虑对于{$ A = p $ 或 $ B = q $}, 我们可以有如下的伪代码:

if (A == p) B 可以为 q 或 !q
if (A == !p) B 只能为 q
if (B == q) A 可以为 p 或 !p
if (B == !q) A 只能为 p

我们不难发现,对于第二种和第四种情况,我们是可以确定 $ A $ 和 $ B $ 的;

因此,我们可以依据这个性质,进行加边操作:

$ A_p \rightarrow B_q $ 这条边代表当 $ A $ 为 $ p $ 时,$ B $ 只能为 $ q $;

这样建好图后,我们要判断无解;

引理1: 若 $ A_p $ 与 $ A_{!p} $ 在同一强联通分量中,即无解;

显然;

求法:$ Tarjan $;
对于有解的情况,题目要求输出一种方案,有以下引理:

引理2: 对于$ A $ 的两种情况 $ A_p $ 与 $ A_{!p} $,若选择两者拓扑序较大的( $ Tarjan $ 遍历顺序较小的)作为答案,则一定可以满足要求;

这里的“满足要求”指的是满足要求的多种情况中的一种情况;

其实稍微思考一下,不难发现拓扑序较大的节点需要满足的条件较少,所以更容易满足要求;

至于证明,我来浅浅的证明一下:

证:

考虑采用反证法;

设 $ f( A_p ) $ 表示缩点后 $ A_p $ 所在强连通分量的拓扑序;

设有:

\[f(A_p) < f(A_{!p}) \ \ \ \ \ \ \ \ \ \\ \ \ \\ \ \ \ (1) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ f(B_{!q}) < f(B_q) \ \ \ \ \ \ \ \ \ \\ \ \ \\ \ \ \ (2) \]

且存在单向边:

\[ X = (B_q \rightarrow A_p) \]

由题意,我们可以得知有一条单向边:

\[Y = (A_{!p} \rightarrow B_{!q}) \]

此时我们可以发现,原来的二元组为:{$ A_p $ 或 $ B_{!q} $}

所以此时的合法方案有:

$ A = p, B = !q $;

$ A = p, B = q $;

$ A = !p, B = !q $;

三种;

不难发现,这三种情况涵盖了选出的两个变量的拓扑序都是小的和一大一小两种情况,唯独没有两个都是大的这种情况;

由 $ X $,易得:

\[f(A_p) > f(B_q) \ \ \ \ \ \ \ \ \ \\ \ \ \\ \ \ \ (3) \]

由 $ Y $,易得:

\[f(A_{!p} < B_{!q}) \ \ \ \ \ \ \ \ \ \\ \ \ \\ \ \ \ (4) \]

联立 $ (1) (3) (4) $,得:

\[ f(B_{!q}) > f(B_q) \]

与 $ (2) $ 矛盾,所以可以得出,在这种情况下,选出的两个变量的拓扑序都是小的和一大一小两种情况不合法(最极限的情况),而我们又可以判断出题目中所给出的情况有解,所以选择两者拓扑序较大的一定可以满足要求;

引理2得证;

证毕;

Luogu P5782 [POI2001] 和平委员会

把每个人的搭档看做其反面即可;

最后判断一下搭档是否在同一个强连通分量里即可;

输出方案和上一题相同;

标签:拓扑,算法,简记,满足要求,情况,引理,可以,SAT
From: https://www.cnblogs.com/PeppaEvenPig/p/18354879

相关文章

  • Day27 贪心算法part1
    任务455.分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果s[j]>=g[i],我们可以将这个饼干j分配给孩子i,这......
  • 国际国密双算法SSL证书申请方法
    国际国密双算法证书的申请方法主要遵循以下步骤,以JoySSL为例进行说明:一、选择CA机构首先,需要选择一个提供国际国密双算法SSL证书服务的CA机构。JoySSL作为国内自主品牌,不仅提供双算法SSL证书,还确保整个验签过程都在国内完成,重要数据不会出境,全面满足国家相关规定。二、注册......
  • 【408DS算法题】009进阶-二维数组的查找
    Index题目实现代码分析题目在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。​进阶要求——时间复杂度:......
  • 排序算法 内省排序(STL sort) IntroSort --C/C++
    内观排序/内省排序内省排序-维基百科,自由的百科全书(wikipedia.org)内省排序(英语:Introsort)是由大卫·穆塞尔在1997年设计的排序算法。这个排序算法首先从快速排序开始,当递归深度超过一定深度(深度为排序元素数量的对数值)后转为堆排序。采用这个方法,内省排序既能在常规数据集......
  • 算法力扣刷题记录 七十七【63. 不同路径 II】
    前言动态规划第6篇。记录七十七【63.不同路径II】一、题目阅读一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那......
  • 排序算法
    排序算法目录排序算法算法的稳定性1.冒泡排序1.算法步骤2.动图演示2.选择排序1.算法步骤2.动图演示3.插入排序1.算法步骤2.动图演示a.直接插入排序b.算法优化--->二分插入排序4.希尔排序5.归并排序2.算法步骤3.动图演示分析:6.堆排序分析:算法步骤7.快速排序算法步骤分析:......
  • 142文章解读与程序——SCI《基于DDPG算法的发电公司竞价策略研究》已提供下载资源
    ......
  • 【408DS算法题】进阶011-20年真题_三元组的最小距离
    Index真题题目分析实现总结真题题目定义三元组(a,b,c)(a,b,c均为正数)的距离D=|a-b|+|b-c|+|c-a|给定3个非空整数集合S1、S2和S3,按升序分别存储在3个数组中。设计一个尽可能高效的算法,计算并输出所有可能的三元组(a,b,c)......
  • 【算法/学习】:记忆化搜索
    ✨                         落魄谷中寒风吹,春秋蝉鸣少年归    ......
  • 【SPIE出版】第四届计算机视觉、应用与算法国际学术会议(CVAA 2024)
    计算机视觉、应用与算法的领域,一直在飞速发展,第四届计算机视觉、应用与算法国际学术会议(CVAA2024) 将汇聚世界各地的顶尖学者、研究人员和企业代表,共同分享和交流计算机视觉在各个领域的最新研究成果、技术突破和产业应用。我们希望本次会议的成果能对计算机科学领域的知识做......