比较重要的知识点。
应用1:求不等式的可行解
应用2:求最大值或最小值
1. 定义与应用场景
形如
的形式的不等式组,即可用差分约束。
这类题目大概要求我们要 数形结合,可能是最好的解释了。
2. 应用 1
建图方式
由于最短路一定是最短路(废话,那么每一条边的转移一定是有效的,如果出现了
所以我们可以得到最短路的三角形不等式:
对于
但是这里没有源点,我们可以随意找一个点。
真的可以吗
其实是不完全可以的。
如果从源点到不了所有的边,那么这个点不可行。
注意,不是遍历到所有的点,因为可能有孤立的点,与主体无关。
好像一般是不会出现不联通的边吧……
步骤
先将每一个不等式
转换成从 到 连一条 的边。找一个源点,使它能到每一条边。
从这个点找单源最短路。
有一个问题:有负环是什么情况?
易得,从一个环到自己且是负的话,就是
又
同样,如果原不等式组无解,那么图有负环。(否则一定能构造出一组解)
如果有解,这一组解就是
另外,我们也可用最长路。
改为
我们就反过来了,如果有正环,那么无解了。
3.应用2
结论:如果是最小值,那么求最长路;如果是最大值,那么求最短路。
首先,通过前面的转化,我们发现,对于同一个题,我们既可以构造最长路,也可以构造最短路。
虽然有些反直觉,为什么是正确的呢?
假设我们讨论最长路。
因为最长路,有一个式子
问题1:如何转化
建立一个超级源点
以
所有上界的最小值,即为
我们又可以发现一个有趣的性质:
每一个不等式链,都是
然后,这些上界的最小值,其实就是最短路!
反过来,求最小值的话,应该求最长路。
这个就不再赘述。
4.例题
T1:
1 |
|
T2:
差分约束最难的地方就在于找不等关系。
利用前缀和的思想:
表示 到 中,选出数的个数。
可以发现,
那么这样就可以完成对每个点的遍历了。
1 |
|
T3:
特别拿出来讲的目的是其 实现较难。
不满足形式,用前缀和优化:
最后一项有 回到了数学课)。
消哪个呢?
看到
那么枚举
1 |
|
Related Issues not found
Please contact @mydcwfy to initialize the comment