图论: 差分约束系统

来源:互联网 发布:java酒店管理系统程序 编辑:程序博客网 时间:2024/05/19 13:19

差分约束系统

 

    如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi<=bk(i,j∈[1,n],k∈[1,m]),

 则称其为差分约束系统(system of differenceconstraints)。亦即,差分约束系统是求解关于一组变量的

 特殊不等式组的方法。

  求解差分约束系统,可以转化成图论的单源最短路径(或最长路径)问题。

  观察xj-xi<=bk,会发现它类似最短路中的三角不等式d[v]<=d[u]+w[u,v],即d[v]-d[u]<=w[u,v]。因此,

 以每个变量xi为结点,对于约束条件xj-xi<=bk,连接一条边(i,j),边权为bk。我们再增加一个源点s,s与所

 有定点相连,边权均为0。对这个图,以s为源点运行Bellman-ford算法(或SPFA算法),最终{d[i]}即为一

 组可行解。

    其实我想总结的是:怎么将实际问题中确定约束条件的符号, 来却定用最长路还是最短路.

    1.最短路:  d[x] - d[y] >=Z   ==>  d[y]<= d[x]+(-Z)

       spfa算法的判断条件变成:if( dist[edges[e].v] >dist[u]+edges[e].w )

                                   dist[edges[e].v] = dist[u]+edges[e].w

      连边 x->y  权值为-Z,初始化为源点到个点的距离为INF(无穷大), 源点到源点为0

       目的:求出最短路满足它们与源点之间的相互差值最大.

 

    2.最长路:  d[x] - d[y] >=Z   ==>  d[x]>= d[y]+Z

      spfa算法的判断条件变成:if( dist[edges[e].v] <dist[u]+edges[e].w )

                                   dist[edges[e].v] = dist[u]+edges[e].w

      连边 y->x 权值为Z, 初始化为源点到个点的距离为-INF(无穷小), 源点到源点为0

       目的:求出最长路满足它们与源点之间的相互差值最小.

0 0