关于差分约束

Posted on 2025-04-18 23:02  K_J_M  阅读(26)  评论(0)    收藏  举报

求解若干个不等式,形如

\[x_i-x_j≤w_k \]

为了求解,我们将方程变形

\[x_i≤w_k+x_j \]

然后求解最短路时我们是这样操作的

\[dis_u=\min\{dis_u,dis_v+w(u,v)\} \]

求解完整个图的最短路之后,我们有

\[dis_i+w(i,j)≥dis_j \]

变形可以得到

\[dis_j-dis_i≤w(i,j) \]

对比上面的式子,因此可以建立一条由\(j\)\(i\)的边权为\(w_k\)的有向边。
另外,当出现一下方程时,我们可以做如下变化。

\[x_i-x_j<w_k \ =>\ x_i-x_j≤w_k-1 \]

\[x_i=x_j \ => \ x_i-x_j≤0 且x_j-x_i≤0 \]

\[x_i-x_j≥w_k \ => \ x_j-x_i≤-w_k \]

另外,我们建立的图中可能并不是联通的,因此我们可以建立一个超级源点\(S\)向所有点建立一条权值为\(w\)的有向边,边权为\(w\)的意义为使得\(x_i≤w\)。同样的,我们可以用最长路以求出\(x_i-x_j≥w_k\)的方程,但是考虑到方程无解的情况,及为有负环,为什么呢?证明,假设有一个环\((x_1,x_2),(x_2,x_3)....(x_n,x_1)\)\(\sum_{i=1}^{n}w(x_i,x_{i+1})<0\),那么上面这个负环我们可以转化为方程,\(x_i-x_{i+1}≤w_i\),那么我们联立\(n\)个方程可以得到,\(x_1-x_2+x_2-x_3+...+x_n- x_1=0≤\sum_{i=1}^{n}w_i<0\)\(0<0\)这显然是不可能的,因此有负环的情况无解。所以我们使用\(spfa\)为最好。