差分约束

(几万年前的博客了,刚从洛谷搬过来)

主要内容

差分约束系统 是一种特殊的 \(n\) 元一次不等式组 。

差分约束系统中的每个约束条件 \(x_i-x_j\le c_k\) 都可以变形成 \(x_i\le x_j+c_k\)\(x_j\ge x_i-c_k\) ,这与单源最短路中的三角形不等式非常相似。因此,我们可以把每个变量 \(x_i\) 看做图中的一个结点,对于每个约束条件连边。

需要注意的是,有些题目看能会对解的上、下界进行约束,因此我们需要对这些条件处理(这里只考虑对于这 \(n\) 个元素 只约束了上界只约束了下界 ):

  • 只约束下界:有 \(0\) 号点向每一个点连一条长为 \(Lim_i\) 的边,表示第 \(i\) 号元素的 下界\(Lim_i\) ,如图所示建边:

    题意转化连边
    \(x_a-x_b\ge c\)\(x_a\ge x_b+c\)add(b,a,c)
    \(x_a-x_b\le c\)\(x_b\ge x_a-c\)add(a,b,-c)
    \(x_a=x_b\)\(x_a\ge x_b\)\(x_b\le x_a\)add(a,b,0),add(b,a,0)

    之后对整张图跑 最长路

  • 只约束上界:有 \(0\) 号点向每一个点连一条长为 \(Lim_i\) 的边,表示第 \(i\) 号元素的 上界\(Lim_i\) ,如图所示建边:

    题意转化连边
    \(x_a-x_b\ge c\)\(x_b\le x_a-c\)add(a,b,-c)
    \(x_a-x_b\le c\)\(x_a\le x_b+c\)add(b,a,c)
    \(x_a=x_b\)\(x_a\le x_b\)\(x_b\le x_a\)add(a,b,0),add(b,a,0)

    之后对整张图跑 最短路

\(dist[0]=0\) ,若存在负环 \(/\) 正环,则不等式无解,否则 \(x_i=dist[i]\) 是该差分约束系统的一组解 。

最坏情况下(存在负环 \(/\) 正环)复杂度为 \(O(nm)\)

注意:整个图不一定是联通的!


例题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值