差分约束 - 详细讲解 + 例题

差分约束 - 详细讲解 + 例题

一、差分约束

差 分 约 束 主 要 是 解 决 形 如 : x i ≤ x j + k 组 成 的 不 等 式 组 的 一 组 可 行 解 或 最 优 解 。 差分约束主要是解决形如:x_i≤x_j+k组成的不等式组的一组可行解或最优解。 xixj+k

通 常 是 通 过 最 短 路 算 法 来 解 决 。 通常是通过最短路算法来解决。

1、说明

设 有 n 个 变 量 和 m 个 不 等 关 系 构 成 的 不 等 式 组 : 设有n个变量和m个不等关系构成的不等式组: nm

{ x 1 ≤ x 2 + w 1 x 2 ≤ x i + w 2 . . . x i ≤ x j + w i . . . x j ≤ x n + w j , 1 ≤ i , j ≤ n 。 1 − ( 1 ) \begin{cases} x_{1}≤x_{2}+w_1\\x_{2}≤x_{i}+w_2\\...\\x_{i}≤x_{j}+w_i\\...\\x_{j}≤x_{n}+w_{j}\end{cases},1≤i,j≤n。\qquad\qquad1-(1) x1x2+w1x2xi+w2...xixj+wi...xjxn+wj1i,jn1(1)

我 们 观 察 不 等 式 形 式 : x i ≤ x j + k 我们观察不等式形式:x_i≤x_j+k xixj+k

假 设 有 n 个 点 和 m 条 边 的 有 向 图 , 点 j 和 i 之 间 存 在 一 条 权 值 为 k 的 有 向 边 。 假设有n个点和m条边的有向图,点j和i之间存在一条权值为k的有向边。 nmjik

d i s [ i ] 表 示 从 源 点 到 i 的 最 短 距 离 。 dis[i]表示从源点到i的最短距离。 dis[i]i

若 d i s [ j ] + k < d i s [ i ] , 则 我 们 需 要 借 助 j 点 进 行 松 弛 操 作 。 若dis[j]+k<dis[i],则我们需要借助j点进行松弛操作。 dis[j]+kdis[i]j

即 更 新 d i s [ i ] = d i s [ j ] + k 。 即更新dis[i]=dis[j]+k。 dis[i]=dis[j]+k

当 整 个 最 短 路 算 法 完 成 后 , 必 有 不 等 关 系 d i s [ i ] ≤ d i s [ j ] + k 。 当整个最短路算法完成后,必有不等关系dis[i]≤dis[j]+k。 dis[i]dis[j]+k

因 此 , 我 们 可 以 将 整 个 不 等 式 组 看 作 是 一 个 图 , 将 不 等 关 系 看 作 是 一 条 条 边 。 因此,我们可以将整个不等式组看作是一个图,将不等关系看作是一条条边。

这 样 , 根 据 不 等 式 组 建 图 后 , 跑 一 遍 最 短 路 , 就 能 够 得 到 满 足 不 等 式 组 一 组 可 行 解 ( d i s [ 1 ] , d i s [ 2 ] , . . . , d i s [ n ] ) 。 这样,根据不等式组建图后,跑一遍最短路,就能够得到满足不等式组一组可行解(dis[1],dis[2],...,dis[n])。 (dis[1],dis[2],...,dis[n])

当 然 , 前 提 是 有 解 。 当然,前提是有解。

当 图 中 存 在 负 环 时 , 我 们 是 不 能 够 通 过 最 短 路 算 法 得 到 可 行 解 的 。 对 应 的 方 程 组 也 是 无 解 的 。 当图中存在负环时,我们是不能够通过最短路算法得到可行解的。对应的方程组也是无解的。

原因:

根 据 上 述 方 程 组 , 根据上述方程组,

有 不 等 关 系 : x 1 ≤ x 2 + w 1 ≤ x i + w 2 + w 1 ≤ x j + w i + w 2 + w 1 ≤ x n + w j + w i + w 2 + w 1 。 有不等关系:x_1≤x_2+w_1≤x_i+w_2+w_1≤x_j+w_i+w_2+w_1≤x_n+w_j+w_i+w_2+w_1。 x1x2+w1xi+w2+w1xj+wi+w2+w1xn+wj+wi+w2+w1

这 对 应 一 条 从 x n 到 x 1 的 路 径 : x n − > x j − > x i − > x 2 − > x 1 。 这对应一条从x_n到x_1的路径:x_n->x_j->x_i->x_2->x_1。 xnx1xn>xj>xi>x2>x1

假 设 有 不 等 关 系 x n ≤ x 1 + w n , 则 有 x 1 ≤ x 1 + w n + w j + w i + w 2 + w 1 , 假设有不等关系x_n≤x_1+w_n,则有x_1≤x_1+w_n+w_j+w_i+w_2+w_1, xnx1+wnx1x1+wn+wj+wi+w2+w1

即 w n + w j + w i + w 2 + w 1 ≥ 0 , 即w_n+w_j+w_i+w_2+w_1≥0, wn+wj+wi+w2+w10

对 应 环 : x n − > x j − > x i − > x 2 − > x 1 − > x n 。 对应环:x_n->x_j->x_i->x_2->x_1->x_n。 xn>xj>xi>x2>x1>xn

若 该 环 为 负 环 , 即 w n + w j + w i + w 2 + w 1 < 0 , 就 与 约 束 条 件 冲 突 了 。 若该环为负环,即w_n+w_j+w_i+w_2+w_1<0,就与约束条件冲突了。 wn+wj+wi+w2+w1<0

因 此 , 若 图 中 存 在 负 环 , 则 方 程 组 无 可 行 解 。 因此,若图中存在负环,则方程组无可行解。

源点的选取:

源 点 的 选 取 不 是 任 意 的 。 源点的选取不是任意的。

因 为 是 有 向 图 , 所 以 并 非 每 个 点 都 能 够 到 达 剩 下 的 所 有 点 , 就 未 必 能 够 更 新 到 所 有 边 , 即 所 有 不 等 关 系 。 因为是有向图,所以并非每个点都能够到达剩下的所有点,就未必能够更新到所有边,即所有不等关系。

故 我 们 需 要 选 择 一 个 能 够 到 达 图 中 所 有 点 的 点 , 作 为 源 点 。 故我们需要选择一个能够到达图中所有点的点,作为源点。

若 不 容 易 找 到 某 个 点 作 为 源 点 , 通 常 会 设 置 虚 拟 源 点 0 号 点 。 若不容易找到某个点作为源点,通常会设置虚拟源点0号点。 0

2、求不等式组的可行解

步骤:

① 、 将 每 个 不 等 式 x i ≤ x j + k 转 化 为 一 条 从 j 走 到 i , 权 值 为 k 的 边 。 ①、将每个不等式x_i≤x_j+k转化为一条从j走到i,权值为k的边。 xixj+kjik

② 、 选 取 某 个 源 点 , 满 足 从 该 源 点 出 发 一 定 可 以 遍 历 所 有 边 。 ②、选取某个源点,满足从该源点出发一定可以遍历所有边。

③ 、 求 单 源 最 短 路 。 ③、求单源最短路。

Ⅰ 、 若 存 在 负 环 , 则 原 不 等 式 组 无 解 。 \qquadⅠ、若存在负环,则原不等式组无解。

Ⅱ 、 若 无 负 环 , 则 距 离 数 组 d i s 就 是 原 不 等 式 组 的 一 个 可 行 解 。 \qquadⅡ、若无负环,则距离数组dis就是原不等式组的一个可行解。 dis

3、求可行解中的最值解(每个dis[i]的最值)

① 、 求 最 小 值 , 等 价 于 求 最 长 路 。 ①、求最小值,等价于求最长路。

② 、 求 最 大 值 , 等 价 于 求 最 短 路 。 ②、求最大值,等价于求最短路。

原因:

以 1 − ( 1 ) 方 程 组 为 例 , 最 终 能 够 得 到 : 以1-(1)方程组为例,最终能够得到: 1(1)

{ x j ≤ x n + w j x i ≤ x n + w j + w i x 2 ≤ x n + w j + w i + w 2 x 1 ≤ x n + w j + w i + w 2 + w 1 \begin{cases}x_j≤x_n+w_j\\ \\ x_i≤x_n+w_j+w_i\\ \\ x_2≤x_n+w_j+w_i+w_2\\ \\ x_1≤x_n+w_j+w_i+w_2+w_1 \end{cases} xjxn+wjxixn+wj+wix2xn+wj+wi+w2x1xn+wj+wi+w2+w1

即 从 其 他 点 与 点 n 之 间 的 约 束 关 系 。 即从其他点与点n之间的约束关系。 n

若 x n 确 定 , 则 x j 、 x i 、 x 2 、 x 1 的 最 大 值 也 随 之 确 定 。 若x_n确定,则x_j、x_i、x_2、x_1的最大值也随之确定。 xnxjxix2x1

若 我 们 以 n 为 源 点 跑 最 短 路 , 初 始 化 d i s [ n ] = 0 , 就 能 够 得 到 点 j 、 i 、 2 、 1 到 n 的 最 短 距 离 : 若我们以n为源点跑最短路,初始化dis[n]=0,就能够得到点j、i、2、1到n的最短距离: ndis[n]=0ji21n

{ d i s [ j ] = w j d i s [ i ] = w j + w i d i s [ 2 ] = w j + w i + w 2 d i s [ 1 ] = w j + w i + w 2 + w 1 \begin{cases}dis[j]=w_j\\ \\ dis[i]=w_j+w_i\\ \\ dis[2]=w_j+w_i+w_2\\ \\ dis[1]=w_j+w_i+w_2+w_1 \end{cases} dis[j]=wjdis[i]=wj+widis[2]=wj+wi+w2dis[1]=wj+wi+w2+w1

故 最 短 路 能 够 求 方 程 组 可 行 解 的 最 大 值 。 故最短路能够求方程组可行解的最大值。

最 终 求 得 的 所 有 关 于 x i 的 约 束 条 件 中 的 最 小 值 就 是 x i 的 最 大 值 。 最终求得的所有关于x_i的约束条件中的最小值就是x_i的最大值。 xixi

如 : { x ≤ 2 x ≤ 1 , = > x ≤ 1 。 如:\begin{cases}x≤2\\x≤1\end{cases},=>x≤1。 {x2x1=>x1


二、例题

1、SCOI 2011 - 糖果 - 洛谷 P3275

SCOI 2011 - 糖果 - 洛谷 P3275

2、Intervals - POJ 1201

差分约束 - Intervals - POJ 1201

3、Layout - POJ 3169

差分约束 - Layout - POJ 3169

4、Cashier Employment - POJ 1275

差分约束 - Cashier Employment - POJ 1275

三、总结

① 、 边 权 无 限 制 : 用 s p f a 跑 最 短 路 / 最 长 路 。 时 间 复 杂 度 O ( n m ) 。 ①、边权无限制:用spfa跑最短路/最长路。时间复杂度O(nm)。 spfa/O(nm)

② 、 边 权 非 负 : t a r j a n 缩 点 + t o p s o r t 。 时 间 复 杂 度 O ( n + m ) 。 ②、边权非负:tarjan缩点+topsort。时间复杂度O(n+m)。 tarjan+topsortO(n+m)

例 题 : \qquad例题: Tarjan(强连通分量缩点) - SCOI 2011 - 糖果 - 洛谷 P3275

③ 、 边 权 恒 正 : t o p s o r t , 时 间 复 杂 度 O ( n + m ) 。 ③、边权恒正:topsort,时间复杂度O(n+m)。 topsortO(n+m)

例 题 : \qquad例题: 拓扑排序(差分约束) - Reward - HDU 2647

例 题 : \qquad例题: 拓扑排序(差分约束) - NOIP 2013 车站分级 - 洛谷 P1983

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值