【图】差分约束
What is Difference Constrains System?
差分约束系统<\(V, C\)>:
- \(V\)为系统中的变量集合
- \(C\)为系统中约束集合,即一组不等式,每一条约束的形式如 \(x_i-x_j \leq b_{i,j}\), \(x_i,x_j \in V, b_{i,j} \in R\)
写成矩阵的形式,则每一行有且仅有一个1和-1,其余为零:
\[\left(
\begin{matrix}
1 & -1 & 0 & 0 \\
0 & -1 & 1 & 0 \\
0 & 1 & -1 & 0 \\
\end{matrix}
\right)
\left(
\begin{matrix}
x_i \\
x_j \\
x_k \\
x_l \\
\end{matrix}
\right)
\leq
\left(
\begin{matrix}
b_{i,j} \\
b_{k,j} \\
b_{j,k} \\
\end{matrix}
\right)
\]
求解差分约束系统
求解差分约束系统<\(V, C\)>的解就是求满足所有不等式\(C\)的一个关于\(V\)集合的解。
通常利用有向图的最短路径、最长路径算法来求解差分约束的解。为何可以这样呢?以图论的最短路径算法为例,在求解最短路径的时候往往会有松弛操作:
\[ Dis[v] > Dis[u] + weight(u, v)
\quad then \quad
Dis[v] = Dis[u] + weight(u, v) \]
那么松弛完后\(Dis[v] \leq Dis[u] + weight(u, v)\) (这也是最短路的一个结论),移一下项变成\(Dis[u]-Dis[v] \leq weight(u,v)\) 满足约束的形式\(x_i-x_j \leq b_{i,j}\)。所以可以通过最短路径算法求解\(\leq\)类型的差分约束系统,图的顶点集\(V^{'} \Rightarrow V\),图的边集\(E^{'} \Rightarrow C\),最终求解出的\(Dis[i] \Rightarrow x_i\)。同理,最长路径算法则可以解决\(\geq\)类型的差分约束系统。