差分约束系统总结

本文介绍了差分约束系统的概念及如何将其转化为最短路径问题进行求解。详细讨论了求解最小值和最大值的方法,并提供了几种不同情况下的具体转换策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

差分约束系统可以看成是线性规划的一种特殊情况,可以通过归约到图论中的最短路问题求解。

形式

差分约束系统是若干形如 (XiXjCk) 的二元差分不等式组成的约束条件,对于差分约束系统的问题,通常是让你求其中两个变量差值的最小值 min(XiXj) 或最大值 max(XiXj) .

  • 求最小值

    求一个变量 Xi 比另一个变量 Xj 至少大多少的问题

    这种问题可以由大于的传递性分解为若干约束条件:

    a至少要比b大c. (abc)

    而在最短路径问题中的边(x指向y,权值为w)的含义是y的距离最多比x大w.

    “y的距离最多比x大w” (dist[y]dist[x]+w) n “x至少要比y大-w” (dist[x]dist[y]w)

    所以约束条件 (abc) :a至少要比b大c等价于 “b的距离最多比a大-c”也就是a指向b权值为-c
    这里写图片描述

    可以通过大于的传递性得到一个变量 Xi 比另一个变量 Xj 至少大多少也就是 min(XiXj)=max(c)

    但路径上的权值加起来是 (c) 。要求 (c) 的最大值就是路径 (c) 的最小值再取相反数就行了,最短路算法计算的过程中 Xi 作为源点.

  • 求最大值

    而对于求一个变量 Xi 最多比 Xj 大多少的问题
    这里写图片描述
    同理,可以分解为若干约束条件 (abc) ,意思是a最多比b大c,也就是b指向a权值为c

    一个变量 Xi 最多比 Xj 大多少也就是 max(XiXj)=min(c) ,这样就是求从 Xj 出发到 Xi 的最短路径

归纳

求最小值 min(XiXj) :转化成 (abc) 形式的约束不等式
求最大值 max(XiXj) :转化成 (abc) 形式的约束不等式

min(XiXj)(abc)XiabcXiXjXiabcXiXjXjbacXjXimax(XiXj)(abc){XiabcXiXjXjbacXjXi

  • 关于是求最短路径和最长路径的问题,其实两者可以看成等价的。最长路可以看成是边权取反后(方向不变)最短路的相反数
  • 以哪个点作为源点也是可以灵活选择的,若当前是求 Xi 作为源点的最短路,那么可以把每条边的方向反向,权值不变,就变成了以 Xj 作为源点的最短路
  • 注意:在求最长路的时候,图中除源点外的所有结点初始dis为-INF

判断是否成环

对与是否成环的问题,通常的做法是新建一个结点指向所有结点并且权值为0

应用

POJ 1201 Interval

先做区间和处理再建模

POJ 2983 Is the Information Reliable

spfa判负环

POJ 3159 Candies

需要用dijstra或Dfs版的spfa,bfs+spfa会超时

POJ 1275 Cashier Employment

较为复杂的差分约束题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值