图论: 差分约束系统

本文介绍了差分约束系统的概念及如何将其转化为图论中的单源最短路径问题进行求解。详细阐述了如何通过调整算法参数来解决最短路径与最长路径问题,并给出了具体的实现方法。

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

差分约束系统

 

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

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

 特殊不等式组的方法。

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

  观察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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值