首页 > 其他分享 >差分约束笔记

差分约束笔记

时间:2022-09-25 16:58:33浏览次数:95  
标签:geq 边权 短路 笔记 约束 leq 差分 我们 式子

一个差分约束系统,是由多个形如 \(x_i-x_j\leq c\) 的不等式组成的。现在,我们要试图找出一组解,使得这些不等式都能被满足。

我们在求最短路的过程中,用到一个和上面很像的式子: \(dis_j\leq dis_i+val_i\)

所以我们把式子都化成 \(x_i\leq x_j+c\) 的形式,然后从 \(j\) 向 \(i\) 连一条边权为 \(c\) 的边。

然后我们再建一个超级源点 \(x_0\) 连向所有点,边权为 \(0\) ,代表 \(x_i \leq x_0\),\(x_0\) 的初始 \(dis\) 代表所有 \(x\) 的最小值

所以给出一组式子,我们来观察一下:

\(\begin {cases}B-A\leq x\\C-B\leq y\\C-A\leq z\end{cases}\)

我们把这张图画出来:

现在我们想求 \(C-A\) 的最大值,\(C-A\) 的最大值就是 \(\min\{x+y,z\}\)

然后就能发现:这就是 \(A\) 到 \(C\) 的最短路。那么如果我们从超级源点开始求到所有点的最短路,就是所有 \(x\geq x_0\) 的最大解。(啊其实说 \(x\geq x_0\) 不是很准确,应该是最小的 \(x\) 为 \(x_0\)吧 )

同理,如果我们想求,对于所有\(x\) ,\(x\geq x_0\) 的最小值,就先把式子化成 \(x_j\geq x_i -c\) 的形式,然后从 \(x_i\) 向 \(x_j\) 连一条边,边权为 \(-c\)。然后在这张图上求最长路。

怎样判断无解呢?

像这样的一组不等式是无解的:

\(\begin{cases}x_2\leq x_1 +3\\x_3\leq x_2-5\\x_1\leq x_3 -2\end{cases}\)

三个式子加起来得到 \(x_1\leq x_1-4\) 显然不成立。

然后把图画出来就能发现这是一个负环。所以判断有解的方式就是判负环(当然如果是求最长路就是判正环)

所以大多数时候用 spfa 就行了。

但是如果给出的式子是形如 \(x_i-x_j\geq c\) 的,就移一下项。如果式子是 \(x_i=x_j+c\) ,就先拆成 \(x_i\leq x_j+c\) 和 \(x_i\geq x_j+c\) 两个式子,如果是 \(x_i<x_j\) ,就化成 \(x_i\leq x_j -1\)

然后挂两个例题

[SCOI2011]糖果

link

如果不看数据范围,那就是板子。

但是 spfa 的最坏时间复杂度是过不了的。

然后你可以发现,如果你建出最长路的模型,边权只有 \(0\) 和 \(1\) 两种。所以我们可以先用 tarjan 缩点,如果一个强联通分量里有边权为 \(1\) 的边,因为强联通分量里所有点可以互相到达,所以一定存在正环,直接无解。所以一个强联通分量里所有的点的最短路都是相等的。这样缩点之后直接跑一次拓扑排序就行了

SP116 INTERVAL - Intervals

link

我们用 \(s_i\) 表示 \(0\sim i\) 中已经最少选了多少数了,那么我们有这么几个不等式:\(s_{r_i}-s_{l_i-1}\geq c_i,s_i\geq s_{i-1},s_i\leq s_{i-1}+1\)

第一个式子是题目的约束条件,第二个是表示必须保证 \(s\) 单调不降,第三个保证每个数只选一次。

然后注意到我们必须保证 \(s_{-1}=0\) ,所以不能建超级源点。直接从 \(-1\) 开始。

负下标就直接向右平移一位就行了。

[SCOI2008]天平

link

由 \(A+B>C+D\) 可以推出 \(A-C>D-B\) ,或者 \(A-D>C-B\)

那么就是我们要求 \(A-C\), \(D-B\) ,\(A-D\) ,\(C-B\) 的取值范围了。

我们上面说了,建边之后跑最短路就是差最大,最长路就是差最小。

那么我们分两个数组,\(mx\) 用来求最大的差值,\(mn\) 用来求最小的差值。

具体地说,如果要求 \(a_i>a_j,mx_{i,j}=2,mn_{i,j}=1\)

如果 \(a_i<a_j,mx_{i,j}=-1,mn_{i,j}=-2\)。

其实理解为当 \(a_i>a_j,a_i\leq a_j+2,a_i\geq a_j+1\) ,按照这种理解建边。

然后用 floyd 直接跑全源最短(长)路。

如果 \(A+B>C+D\) 就意味着 \(mn_{A,C}>mx_{D,B}\) 或 \(mn_{A,D} >mx_{C,B}\) ,这样才能保证一定合法。

其他两种情况也差不多。

标签:geq,边权,短路,笔记,约束,leq,差分,我们,式子
From: https://www.cnblogs.com/cc0000/p/16728155.html

相关文章

  • 【图像处理笔记】图像分割之阈值处理
    本章的大多数分割算法都基于图像灰度值的两个基本性质之一:不连续性和相似性。第一类方法根据灰度的突变(如边缘)将图像分割为多个区域;第二类方法根据一组预定义的准则把一幅......
  • 学习笔记4
    一、梗概第七章讨论了多种文件系统;解释了操作系统中的各种操作级别,包括为文件存储准备存储设备、内核中的文件系统支持函数、系统调用、文件流上的1/O库函数、用户命令......
  • MarkDown学习笔记
    MarkDown学习1个“#”+空格+标题可定义一个1级标题标题2个“#”+空格+标题可定义一个2级标题三级标题3个“#”+空格+标题可定义一个3级标题四级标题4个“#”+空格+......
  • Java_笔记总结(三)
    十七、BigInteger1、随机大整数:BigInteger(intnum,Random ran)    num:范围2的num次方2、指定BigInteger(String s)BigInteger  b = new BigInt......
  • Java_笔记总结(二)
    十、继承1、只能单继承:一个子只能一个父2、可以多层继承:爷-父-孙3、关键字:extends (public class dog extends  Animal)4、成员变量访问特点:(1)就近原则......
  • 图像处理学习笔记-04-频率域滤波01-基本知识
    背景傅里叶指出:任何周期函数都可以表示为不同频率的正弦和/或余弦之和的形式,每个正弦项和/或余弦项乘以不同的系数(现在称该和为傅里叶级数);傅里叶变换:非周期函数(该曲......
  • 20201220蔡笃俊《信息安全系统设计与实现》第七、八章学习笔记
    一、任务内容自学教材第7,8章,提交学习笔记(10分)知识点归纳以及自己最有收获的内容(3分)问题与解决思路(2分)实践内容与截图,代码链接(3分)...(知识的结构化,知识的完整性等,提......
  • 【笔记】计算机网络(第6版)-链路层
    0重要内容点对点信道(PPP协议);广播信道(CSMA/CD协议)数据链路层基本问题:封装成帧、透明传输、差错检测1点对点信道的数据链路层数据链路层基本问题:封装成帧、透明传输......
  • Java_笔记总结(一)
    一、CMD1、win+R,cmd2、常用命令(1)盘+冒号(2)dir显示内容(3)cd文件名(进入)(4)cd..(返回)(5)cd\(回家)(6)cls清屏3、把路径保存到环境变量即可直接访问二、基本语法1、输出:......
  • 学习笔记-Metasploit
    Metasploit模块exploits(渗透攻击/漏洞利用模块)  利用已发现的安全漏洞或配置弱点对远程目标进行攻击,为Metsaploit框架中最核心的功能组件。payloads(攻击......