利用图论方法解决不等式为约束条件的解问题
定义
特殊的 n 元一次不等式组,包含 n 个变量 x1,x2,…,xn 以及 m 个约束条件,求一组解 x1=a1,x2=a2,…,xn=an, 使得所有的约束条件得到满足, 否则无解。
约束条件: xi−xj≤ck ,其中 1≤i,j≤n,i=j,1≤k≤m 并且 ck 是常数 (可以是非负数, 也可以是负数) 。
分析
- 约束条件变形成 xi≤xj+ck ,把每个变量看做图中的一个结点,从结点 j 向结点 i 连一条长度为 ck 的有向边。
- 如果 {a1,a2,…,an} 是该差分约束系统的一组解, 那么对于任意的常数 d, {a1+d,a2+d,…,an+d} 显然也是该差分约束系统的一组解。
- 设 dist[0]=0 并向每一个点连一条0 边,跑单源最短路(spfa或bellmanford)
- 若图中存在负环,则给定的差分约束系统无解
- 否则, xi=dist[i] 为该差分约束系统的一组解。
- 注意:不可达的情况即二者无约束条件
变式
- 变式1 : xi−xj≥ck
- 方法一:乘−1 改不等式方向
- 方法二:j 向i 建ck 边,跑最长路
- 变式2 : xi−xj=ck :改为两个:xi−xj≤ck,xi−xj≥ck
- 变式3 : xi−xj<ck :改为xi−xj<ck−1
- 注意:涉及边权为负数时,对于跑最短路 or 反图最长路的选择