差分约束系统粗略讲解

差分约束系统

1 算法概念

差分约束系统,是指以下这类问题的通解:
{ x a 1 − x b 1 ≤ c 1 x a 2 − x b 2 ≤ c 2              ⋮ x a n − x b n ≤ c n Q u e a t i o n : max ⁡ ( x i − x j ) =   ? \begin{cases} x_{a_1} - x_{b_1} \leq c_1\\ x_{a_2} - x_{b_2} \leq c_2\\ \ \ \ \ \ \ \ \ \ \ \ \ \vdots\\ x_{a_n} - x_{b_n} \leq c_n\\ \end{cases}\\ Queation:\max(x_i - x_j) = \ ? xa1xb1c1xa2xb2c2            xanxbncnQueation:max(xixj)= ?
这里, x x x数组是受到了很强的约束,又让我们求 max ⁡ ( x i − x j ) \max(x_i - x_j) max(xixj),所以这类问题被统称为:

差分约束系统

2 算法讲解

设我们现在要求这样一道题:
{ x a 1 − x b 1 ≤ c 1 x a 2 − x b 2 ≤ c 2              ⋮ x a n − x b n ≤ c n \begin{cases} x_{a_1} - x_{b_1} \leq c_1\\ x_{a_2} - x_{b_2} \leq c_2\\ \ \ \ \ \ \ \ \ \ \ \ \ \vdots\\ x_{a_n} - x_{b_n} \leq c_n\\ \end{cases}\\ xa1xb1c1xa2xb2c2            xanxbncn
那么,我们首先需要先把这道题转换一下,变成:
{ x a 1 ≤ c 1 + x b 1 x a 2 ≤ c 2 + x b 2              ⋮ x a n ≤ c n + x b n \begin{cases} x_{a_1} \leq c_1 + x_{b_1}\\ x_{a_2} \leq c_2 + x_{b_2} \\ \ \ \ \ \ \ \ \ \ \ \ \ \vdots\\ x_{a_n} \leq c_n + x_{b_n}\\ \end{cases}\\ xa1c1+xb1xa2c2+xb2            xancn+xbn

这时,我们把每一个形如 x a i − x b i ≤ c i x_{a_i} - x_{b_i} \leq c_i xaixbici的式子都转化成了 x a i ≤ c i + x b i x_{a_i} \leq c_i + x_{b_i} xaici+xbi

然后,我们考虑一个图 G G G,其中 c → d c \rightarrow d cd,边权为 e e e表示 c c c d d d有以下约束关系: d ≤ e + c d \leq e + c de+c(利用 c c c推出 d d d)。

问题问的是 max ⁡ ( x g − x f ) \max(x_g - x_f) max(xgxf),于是我们假设这个图上第 i i i个节点从 f f f出发的最短路为 d i d_i di,那么我们可以发现:对于每一个约束(如 x a 1 ≤ c 1 + x b 1 x_{a_1} \leq c_1 + x_{b_1} xa1c1+xb1),若把 x i x_i xi替换为 d i d_i di,可以发现都是可行的。

这就说明, d i d_i di是一组可行解。

问题问的是 max ⁡ ( x g − x f ) \max(x_g - x_f) max(xgxf),我们把 x f x_f xf设为 0 0 0,问题就变成了 max ⁡ ( x g ) \max(x_g) max(xg),而这恰恰符合最短路,因为 d f = 0 d_f = 0 df=0

接下来,我们考虑 G G G d f s dfs dfs树。沿着这样一颗 d f s dfs dfs树,我们可以发现:永远满足 x i ≤ d i x_i \leq d_i xidi,所以说 d i d_i di是可行解中的最大解。

则答案为 d g d_g dg

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值