图论进阶
推荐资料
Alex_wei
状态图
知识点
什么是图?一些点和边的集合。
什么是状态?一个闭包状物,包含了当前需要的信息和推导下一个状态需要的信息。
所谓状态图,就是:
- 每个状态成为一个点;
- 每个合法操作成为一条边;
- 边权等于这次操作增加的代价;
- 初始状态到目标状态的最值距离/方案数,就是最优代价/方案数。
一种常见的状态图就是分层图,实际上就是把需要的额外信息打包到点里。
其实 DP 本质就是在一个状态图上跑。
P5663 [CSP-J 2019] 加工零件
题目大意
给定 $ n $ 个点、$ m $ 条边的简单无向图。每次询问给出点 $ a $ 和正整数 $ L $,判断是否存在一条从 $ a $ 到 1、长度恰为 $ L $ 的游走。
解题思路
反复经过一条边奇偶性不变,发现答案的判定和奇偶性有关,(如果奇偶性相同,可以反复走边直到满足长度限制)于是建立分层图,两点之间奇偶互相连边。记录 \(f_{v,p}\) 表示从 1 走到点 \(v\) 奇偶性为 \(p\) 的最短路,最后判断一下最短路长度是否 \(\le L\),是否与 \(L \bmod 2\) 奇偶性相同。
启发:发掘题目关键是奇偶性,直接处理比较难,并且有后效性,不妨把奇偶性计入状态,建立状态分层图。
P5100 [JOI 2017 Final] 足球 / Soccer
题目大意
在整数点矩形 \([0, H] \times [0, W]\) 中有 \(N\) 名球员,第 \(i\) 名球员初始位于 \((X_i, Y_i)\),球最初由球员 1 控制。
- 球员沿横向或纵向移动、盘带正整数 \(p\) 个单位,疲劳增加 \(Cp\);
- 控球球员沿横向或纵向踢球正整数 \(p\) 个单位,疲劳增加 \(Ap + B\);
- 球与球员位置相同时,该球员可以控球。
求让球员 \(N\) 控球的最小总疲劳。
解题思路
首先如果球所在位置没有球员,那需要一位离它最近的球员走向它,于是我们先用 bfs 处理出所有位置离他最近的球员距离是多少,这一块复杂度 \(O(HW+N)\)。
我们考虑建造分层图,分 3 层,第一层负责球员控球移动(操作1),第二层负责控制操作 2 的横向踢球,第三层负责控制操作 2 的纵向踢球。
注意:这里横向和纵向不能放在同一层,也不能互相连边,因为球不会拐弯 /doge。
但有一个问题,就是在第一层,球员会移动,球员位置发生改变,那预处理是否无效了呢?
这里有一个重要的性质:就是一个球员最多控一次球。因为如果他把球踢出去后,自己又重新控制回来,明显不如自己继续带,所以不影响最优解的计算。
做完了,\(O(HW \log HW)\)。
启发:有时候计算过程中会出现不合法的状态,或者难以处理的状态,但是如果它并不会影响最终答案,我们就不用去理他。
同余最短路
先看一下 Alex_wei 的高级图论吧,哪里有详细解释与例题,课件里有的它都有。 还有一篇神秘文章 同余最短路的转圈技巧
差分约束
知识点
形如 \(x_u-x_v\le w\),可以转化为等价的三角形不等式 \(x_u\le x_v+w\),因为可能有负权,可以用 SPFA 跑了,如果出现负环那么说明无解。
所有约束先统一成 \(x_v \leq x_u + w\),再连 \(u \to v_o\)
总结一些常见的形式:
| 原约束 | 标准形 | 边 |
|---|---|---|
| \(x_v - x_u \leq c\) | \(x_v \leq x_u + c\) | \(u \to v\)(权 \(c\)) |
| \(x_v - x_u \geq c\) | \(x_v \leq x_u - c\) | \(v \to u\)(权 \(-c\)) |
| \(x_v = x_u + c\) | 两个方向 | \(u \to v\)(权 \(c\)),\(v \to u\)(权 \(-c\)) |
一些注意事项:
-
$ x_v - x_u \geq w $ 改写为 $ x_u - x_v \leq -w $;
-
$ x_v - x_u = w $ 拆成两个方向的不等式;
-
区间和约束先用前缀和变量改写成差。
- 以上讲的都是相对约束,如果是形如 \(x_u\le w\) 这种是绝对约束,需要建立数值源点与之相连。
源点
算法源点:
正确性依赖每条边都被松弛,因此最短路源点要能访问到所有边。一种合法的方式是增加超级源点 $ s $ 向所有点连 0 边。
数值源点:
我们为了使所有约束都是相对约束,添加变量 $ x_0 $ 作为数值源点,绝对约束就可以化成和 $ x_0 $ 的相对约束,同时最后减去 $ x_0 $ 最后的值就是一组合法赋值了。(由于常常用 $ x_0 $ 作为起点所以值大概率是 0)
一般的差分约束不认为两者等同,但是如果恰好数值源点 $ x_0 $ 已经能访问所有点了那么就没有必要添加算法源点。
一些性质
-
差分约束系统有可行解,当且仅当约束图不存在负环。
-
最紧上界:若 \(x_0=0\),从 \(0\) 出发到达 \(v\),\(dis_v\) 就是 \(x_v\) 的最大值。

浙公网安备 33010602011771号