zoukankan      html  css  js  c++  java
  • 图论——差分约束系统理论详析

    概念

      差分约束系统是一种特殊的N元一次不等式组。它包含N个变量x1~XN以及M个约束条件,每个约束条件均形如xi-xj<=ck,其中ck是常数,i,j∈[1,N],k∈[1,M]。

    检索

      应用一:求该N元一次不等式组的一组可行解

      应用二:求满足约束条件的xi的最大值或最小值

    应用一

      首先xi - xj <= ck可以转化成xi <= xj + ck。观察这个式子,不难发现其与最短路中dis[y] <= dis[x] + w极为相似。因此可以将每个约束条件看成从节点j连向节点i的一条权值为ck的有向边,那么求解一组可行解只需要跑一遍单源最短路即可。

    注意:

      单源最短路的源点必须满足能够遍历到所有边。因为要满足一共M个约束条件,我们便会建立M条有向边,能够遍历到其中一条边就相当于考虑了该边对应的约束条件。边集与所有约束条件是一一映射的关系。

    单源最短路会出现两种结果:若图中存在负环,则无解;若不存在负环,则dis数组即为答案。下面证明若存在负环则必然无解。

    证明:

      假设所有约束条件为:x1<=x2+c2,x2<=x3+c3,x3<=x4+c4,……,xk<=x1+c1,显然满足图中存在环。

      则必然满足x1<=x2+c2<=x3+c3+c2<=x4+c4+c3+c2<=……<=xk+ck+……+c2<=x1+c1+ck+……+c2,即∑ci>=0。故若∑ci<0,即图中存在负环,则必然无解。

    应用二

      首先,若{a1,a2,a3,……,aN}是一组解,那么对于任意的常数d,{a1+d,a2+d,a3+d,……,aN+d}必然也是一组解。因为所有的约束条件都是描述变量x之间的相对关系的,并没有数值的界限,故而无法找到最值。

      所以,要求最值,则必然会有形如xi<=c(c为任意常数)这样绝对性的条件以提供边界。

      考虑此类条件在图上的转化:建立虚拟源点,设为节点0,满足x0=0。则xi<=c <=> xi<=x0+c,也就是从节点0向节点i连一条长度为c的有向边。

      以求xi最大值为例,要求xi最大值,则需计算出从xi开始构成的所有不等式链xi<=xj+c1<=xk+c2+c1<=……<=c1+c2+……+ck的上界。

      简单来看,所有上界构成xi<=t1,xi<=t2,……,xi<=ts的不等式组,故最终xi的最大值就是所有上界t中的最小值。

      而每个上界t=c1+c2+……+ck,即为节点0到节点i的一条路径的长度,故而答案就是节点0到节点i的最短路。

    对于上界t即为0到i一条路径长度的证明:

      假设约束条件如下:x1<=x0+c0,x2<=x1+c1,x3<=x2+c2,……,xi<=xi-1+ci-1。即相当于0→1→2→3→……→i,其中各边长分别为c0,c1,c2,……,ci-1

      故xi<=xi-1+ci-1<=xi-2+ci-2+ci-1<=……<=x1+c1+……+ci-1<=x0+c0+c1+……+ci-1=x0+c0+c1+……+ci-1

      该上界∑ci即为这条路径的长度。

      同理,要求最小值,就需在所有下界中找最大值,即应求最长路长度。则约束条件应形如xi>=xj+ck,图中有正环则无解。当然也可以将约束条件转化为xj<=xi-ck,那么方法就与求最大值相同了。

  • 相关阅读:
    Java实现 洛谷 P1060 开心的金明
    (Java实现) 洛谷 P1605 迷宫
    (Java实现) 洛谷 P1605 迷宫
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
    Java实现 洛谷 P1064 金明的预算方案
    (Java实现) 洛谷 P1031 均分纸牌
    QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)
    武则天红人对唐睿宗的桃色报复(如此缺少城府,注定了要在宫廷中过早地出局)
  • 原文地址:https://www.cnblogs.com/ninedream/p/12797126.html
Copyright © 2011-2022 走看看