zoukankan      html  css  js  c++  java
  • 鉴于spfa基础上的差分约束算法

    怎么搞?
       
       1. 如果要求最大值
         想办法把每个不等式变为标准x-y<=k的形式,然后建立一条从y到x权值为k的边,变得时候注意x-y<k =>x-y<=k-1
        将这些约束条件转化为差分约束,不妨设T[x] = S[1]+S[2]+....S[x],那么上面式子就可以转化为:
            1. T[si+ni] - T[si-1] > ki          2. T[si+ni] - T[si-1] < ki 
            又差分约束系统的求解只能针对>=或<=,无法求解>的系统,还好ki是整数,可以很容易将<转化为<= 
           1. T[si-1] - T[si+ni] <= -ki - 1    2. T[si+ni] - T[si-1] <= ki - 1 

          如果要求最小值
         的话,变为x-y>=k的标准形式,然后建立一条从y到x的k边,求出最长路径即可,ralex;

       2.如果权值为正,用dijk,spfa,bellman都可以,如果为负不能用dijk,并且需要判断是否有负环,有的话就不存在

       1.怎么建图;(为什么这么建图)
       2.为什么求的是最长路,为什么是最短路。
       3.为什么可以这么做,别的方法还有的。
       

       spfa去松弛的意思是什么?
       1.找最长或者最短,或者
          判断负环
       2.也就是   例如:poj1364KING题(判断负环,表示满足);
       注:在SPFA开始时将所有结点都放进队列,这样表示一开始和所有点都相连了,初始化dis数组为全0,相当于超级源点的边权值;
       
     /*********------BIG PROBLEM*******-------//////-----

       差分约束的dis[i]代表什么;
        距离;
        什么距离.
       所以说...

     /*********------BIG PROBLEM*******-------//////-----

        这里有个技巧就是使用spfa不想添加附加的节点Vs的话,可以在初始化把所有的节点都加到队列中去,其实就相当于源点入队,开始算法后Vs出队
       更新所得的队列,因为没有边指向Vs,所以后面的更新不会涉及到Vs,即在后面的计算中都不会用到Vs。

     /*******--------建图///初始化--------**************////////***---

     【超级源点】
      spfa的性质决定,因为智障的spfa会先从一个点去引开它所连接的点。。。所以炒鸡源点就是非常炒鸡!!非常牛逼,连接了n个点

     由于P  A  B  X 指“确定A到B的距离(边权)为X”
     从P  A  B  X得到的差分系统为
     dist[A] - dist[B] >= X  &&  dist[A] - dist[B] <= X
     等价于
     dist[B] <= dist[A] - X  &&  dist[A] <= dist[B] + X
      则if(dist[B] > dist[A]-X) 松弛:dist[B] = dist[A]-X
     由于 V  A  B指“只知道A到B的距离(边权)至少为1”
     从V  A  B得到的差分系统为
     dist[A] >= dist[B] +1
     等价于
     dist[B] <= dist[A] -1
     则if(dist[B] > dist[A] -1)  松弛:dist[B] = dist[A] -1





  • 相关阅读:
    八、总结
    第5章、Kafka监控
    十一、总结
    十、图形化的客户端和监控工具
    九、zookeeper四字监控命令
    八、zookeeper 开源客户端curator介绍
    七、Zookeeper原理
    六、zookeeper 事件监听机制
    五、zookeeper的javaApi
    四、zookeeper的Acl权限控制
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934579.html
Copyright © 2011-2022 走看看