差分约束算法原理与应用

一、单源最短路回顾

我们在求单源最短路径的时候,设 u → v u→v uv之间有一条有向边 ( u , v , w ) (u,v,w) (u,v,w),由于只有当 d i s [ v ] dis[v] dis[v]能减小的时候才会被更新,因此则当 v v v u u u更新后一定满足关系式: d i s [ v ] ≤ d i s [ u ] + w dis[v]\le dis[u]+w dis[v]dis[u]+w
而一个图中有若干条这样的有向边,因此也就等价于有多个这样的不等式,利用最短路算法求解这样的不等式组即为差分约束。

二、差分约束的应用

1.求不等式组的可行解
源点需要满足的条件:从源点出发,一定可以走到所有的边。

步骤:

  1. 先将每个不等式 x i ≤ x j + c i x_i\le x_j+c_i xixj+ci转化成一条从 x j x_j xj走到 x i x_i xi,长度为 c i c_i ci的一条有向边
  2. 找一个超级源点,使得该源点一定可以遍历到所有边
  3. 以源点为起点求一遍单源最短路,如果存在负环,则原不等式组一定无解;如果没有负环,则 d i s [ i ] dis[i] dis[i]就是原不等式组的一个可行解

求形如 x i ≥ x j + c i x_i\ge x_j+c_i xixj+ci的不等式组则求最长路,出现正环则无解。

2.求每个变量的最大值或最小值
结论:如果求的是最小值 ,则应该求最长路;如果求的是最大值,则应该求最短路。

求最值问题中一定存在某个形如 x i ≤ C x_i\le C xiC的一个方程,其中 C C C是一个常数,如何表示这类不等式呢?可以设一个超级源点值为 0 0 0,则原式变为 x i ≤ x 0 + C x_i\le x_0+C xix0+C,因此建立一条 0 → x i 0→x_i 0xi长度为 C C C的边即可。

这里以求 x i x_i xi的最大值为例:求所有从 x i x_i xi出发,构成的不等式链 x i ≤ x j + c 1 ≤ x k + c 2 + c 1 ≤ ⋯ ≤ c 1 + c 2 + ⋯ + c n x_i\le x_j+c_1\le x_k+c_2+c_1\le \dots \le c_1+c_2+\dots +c_n xixj+c1xk+c2+c1c1+c2++cn所计算出的上界(形如 x ≤ C x\le C xC),最终 x i x_i xi的最大值等于所有上界的最小值(即若 x ≤ 5 , x ≤ 2 , x ≤ 3 x\le 5,x\le 2, x\le 3 x5,x2,x3,那么 x ≤ 2 x\le 2 x2)。

求最大值的分析过程同理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柃歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值