关于差分约束的一点理解

引例

给定$n$个变量和$m$个不等式,每个不等式形如$x_i-x_j\leqslant a_k$,求$x_{n-1}-x_0$的最大值$0<i,j\leqslant n$

$x_1-x_0\leqslant 2 \\x_2-x_0\leqslant 7 \\x_3-x_0\leqslant 8 \\x_2-x_1\leqslant 3 \\x_3-x_2\leqslant 2 $

变形得到

$x_3-x_0\leqslant 8 \\x_3-x_0\leqslant 9 \\x_3-x_0\leqslant 7$

对于每个不等式$x_i-x_j\leqslant a_k$,对结点$j$和$i$建立一条$j\rightarrow i$的有向边,边权为$a_k$,求$x_{n-1}-x_0$的最大值即为求$0$到$n-1$的最短路

类似于SPFA的松弛操作

SPFA的松弛操作:如果$d_u+w(u,v)<d_v$,那么更新$d_v=d_u+w(u,v)$

差分约束

数形结合

变形原不等式得到

$x_i-x_j\leqslant a_k$得到$x_i\leqslant x_j+a_k$。

令$i=v,j=u,d=x$,可以得到$d_v\leqslant d_u+w(j,i)$

SPFA的松弛操作$if(d_u+w(u,v)<d_v)$那么$d_v=d_u+w(u,v)$,即为$d_u+w(u,v)\geqslant d_v$ 

三角不等式

$B-A\leqslant c①\\C-B\leqslant a②\\C-A\leqslant b③$

 

 

 要求$C-A$的最大值,只需$①+②$,即可得到$C-A\leqslant a+c$,本质上就是求$min(b,a+c)$,三角不等式推广到$m$个,变量推广为$n$个,就变成$n$个点$m$条边的最短路问题

判断是否有解

最短路会出现负权圈或者根本就不可达的情况,所以在不等式组转化的图上也有可能出现三种情况

·有解

·无解

·有无限多解

$x_t-x_s$最大值不存在

有负环

$x_t-x_s$最大值无限大

不相连

最小值问题

改变符号即可

不等式的标准化

既有$ \leqslant$又有$ \geqslant$

如果需要求的是两个变量差的最大值,那么需要将所有不等式转变成$ \leqslant $的形式,建图后求最短路
相反,如果需要求的是两个变量差的最小值,那么需要将所有不等式转化成$ \geqslant $,建图后求最长路

形如$A-B=c$

转化为$A-B\leqslant c①\\A-B\geqslant c②$,建图

整数域,形如$A-B<c$

变形,整理成$A-B\leqslant c-k(k \in Z)$

 

 

posted @ 2021-05-15 23:44  Tenderfoot  阅读(64)  评论(0编辑  收藏  举报