zoukankan      html  css  js  c++  java
  • 关于SPFA求解差分约束问题

    1 什么是差分约束系统

    设有一组不等式:

                                                                    

    不等式的特点是 xi-xj<=Ck.(当然大于等于也可以,因为乘以个-1就可以变换,单纯的小于的话,要让Ck-1转换为小于等于),我们把这样的不等式组成为差分约束。

    这个不等式组要么有无穷多解,要么无解。假设存在一组解{x1,x2,x3,x4,x5},那么{x1+k,x2+k,x3+k,x4+k,x5+k}同样也是该方程组的一组解。

    2 差分约束系统的解

    差分约束系统的解常常与最短路算法联系在一起

     看一下这个图,从A->B有一条距离为C的边......。然后我们求从A到C的距离dis[c]=min(b,a+c),然后再看一下上面的三个不等式,C-A<=b并且C-A<=a+c(不等式1和不等式2相加)

    这个过程和最短路算法里的松弛过程特别类似。

    3 构图

    根据上图,假设有不等式B-A<=C,就会有一条A到B的边,权值为C,与之对应。所有根据不等式我们可以构造出与之对应的边来。什么情况下无解?不等式无解映射到最短路中也就是当出现负权环的时候(最长路是正权环时无解)。

    4 增加超级源点

    具体实现时,往往在原图上附加一个顶点,这个顶点与每个顶点都连接一条权值为0的边,以上述不等式为例,也就是新加入一个未知的不等式组

    然后以x0为起点跑SPFA,求得的dis[i]就是xi的最大值了。一个无形的条件dis[x0]=0,也就是说我们把x0当做源点,x0到x0的距离当然为0,如果我们修改dis[x0]=A,扎样的话我们就可以限制每个xi的范围了,每个xi就小于等于A。。。

    https://blog.csdn.net/dragon60066/article/details/80245797

     

     

  • 相关阅读:
    回档|朴素的网络游戏
    回档|NOIP2010 关押罪犯
    回档|tyvj1091 等差数列
    python lambda 函数
    python map函数
    linux命令清除服务器缓存
    python 类
    距阵的运用
    有一种感动叫ACM(记WJMZBMR在成都赛区开幕式上的讲话)
    C语言strstr()函数:返回字符串中首次出现子串的地址
  • 原文地址:https://www.cnblogs.com/Accepting/p/12789121.html
Copyright © 2011-2022 走看看