差分约束学习笔记

引入

直接看板题
给了一个序列,不知道他们分别是几,但知道他们之间的差的一些大小限制。
问序列是否存在。

差分约束

对于一个约束 \(a[u]-a[v]\le c\)
变形为 $$a[u]\le a[v]+c$$
转化为图论问题,令 a[u] 表示原点到 u 的最短路,这个限制就相当于 v 到 u 有一条长度为 c 的边
那么问题是否无解解就是 spfa 判断负环,有解时最短距离就是一组解
tips : 有时候转化为最长路问题,spfa 判断正环
tips:对于\(a_i\ge c\) 这种考虑开超级原点转化为相对关系
tips:一般需要超级原点解决不连通问题

例题

一、小K
这题与模版唯一不同就是加上把 \(a_u=a_v\) 转化为 \(a_u\le a_v+0 \ and \ a_v\le a_u+0\)

二、糖果
这道题看似是模版,但实际上直接套是过不了的(Tle),并且多了一个最小解要求
我们正常套差分约束模板建图,这个时候介绍两个结论:
1、求最小的解应该用最长路,反之求最大的解用最短路
2、建出来的图中一个 scc 中的点权应该是一样的

第二个应该随便画图就出来了,主要是第一个反直觉。
其实就是因为 求最小值的时候一定先有一个柿子 \(a_i\ge c\),然后把 \(a_i\) 在带到每个化成大于等于的柿子里求出最小值,而这正是符合求最长路的过程的。
所以建图后缩点再拓扑排序求最长路即可

三、赛车游戏
这题是一个转化建模,问题要求 u 到 v 有一条边实际上就是要求 \(1\le dis_v-dis_u\le 9\)
但是这题还有很多注意比如说 用并查集判断无解,没有连到 1、n 的点不管......

四、倍杀女装
先想没有 t 怎么做:
乍一看得出一些这样的柿子 \(\frac{X_a}{X_b}\ge k\)
但是差分约束得是加减法,于是想到劳格数,把柿子化为 \(log_2X_a-log_2X_b \ge log_2k\)
然后对于赋值的点还是超级原点即可
有了 t 发现具有单调性,二分即可。注意使用一些 trick 不要每次建边

posted @ 2025-03-17 16:24  LC_Nocl  阅读(17)  评论(0)    收藏  举报