差分约束

最近想学习差分约了。。

整理一下资料吧

     所谓差分约束系统,是指一组不定方程(A,x,T,b),其中A的每行有一个1,一个-1,其余为0,x为解向量,T为<=或>=组成的向量,b为约束矢量。具体来说,就是每行都具有 xi-xj >=|<= bi 的形式。约束的目标是使得目标函数xt-xs最大或最小。


       假设一个系统由n个变量和m和约束条件组成,约束条件形如:xj - xi <= bk;

类似于最短路中的三角不等式:dis[j] <= dis[k] + map[k][j];也就是:dis[j] - dis[k] <= map[k][j]; 这就把差分约束转化成了单源最短路径

因此,以每个变量xi为结点,对于约束条件xj-xi <= bk. 连接一条边(i,j)边权为bk

增加一个源点s,s与所有定点相连,边权都是0.对于这个图,以s为源点运行bellman-ford(或spfa算法)最终dis[i]为一组可行解

例如,考虑这样一个问题,寻找一个5维向量x=(xi)以满足:这一问题等价于找出未知量xi,i=1,2,…,5,
满足下列8个差分约束条件: x1-x2≤0  x1-x5≤-1  x2-x5≤1   x3-x1≤5    x4-x1≤4   x4-x3≤-1    x5-x3≤-3   x5-x4≤-
该问题的一个解为x=(-5,-3,0,-1,-4),另一个解y=(0,2,5,4,1),这2个解是有联系的:y中的每个元素比x中相应的元素大5。
差分约束_第1张图片

 

引理:设x=(x1,x2,…,xn)是差分约束系统Ax≤b的一个解,d为任意常数。则x+d=(x1+d,x2+d,…,xn+d)也是该系统Ax≤b的一个解。

差分约束系统中源点到每个点的距离确定

关于Dist[]的初始化化
1.如果将源点到各点的距离初始化为0,最终求出的最短路满足 它们之间相互最接近了
2.如果将源点到各点的距离初始化为INF(无穷大),其中之1为0,最终求出的最短路满足 它们与该点之间相互差值最大。
差分约束系统的应用特性:
>=,求最小值,做最长路;
<=,求最大值,做最短路。
边都是从后往前~~~
<=构图。
有负环说明无解。
求不出最短路(为Inf)为任意解。
>=构图时类似。

你可能感兴趣的:(差分约束)