update on 2020.5.5 歡迎來錘爆樓主,轉載請標明地址
如果嫌我講得不好那就來康康這篇吧傳送門
其實就是一種最短路的模型
引例
給定n個變量和m個不等式,每個不等式形如 x[i] - x[j] <= a[k],求 x[n-1] - x[0] 的最大值。
(0 <= i, j < n)
例:n=4
\(x_1-x_0 <= 2\)①
\(x_2-x_0 <= 7\)②
\(x_3-x_0 <= 8\)③
\(x_2-x_1 <= 3\)④
\(x_3-x_2 <= 2\)⑤
然后經過認真的瞎搞計算就變成了這個鴨子:
1、③ \(\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ x_3-x_0 <= 8\)
2、②+⑤\(\ \ \ \ \ \ \ \ \ \ \ \ x_3-x_0 <= 9\)
3、①+④+⑤\(\ \ \ \ \ \ \ x_3-x_0 <= 7\)
對於每個不等式 \(x_i - x_j <= a_k\),對結點 \(j\) 和 \(i\) 建立一條 \(j -> 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);
然后再隨便的瞎搞一下,就能把圖畫出來了...
正題(差分約束)
一、我們可以從數形結合的方式來看
從數形結合上看的定義如若一個系統由n個變量和m個不等式組成,並且這m個不等式對應的系數矩陣
中每一行有且僅有一個1和-1,其它的都為0,這樣的系統稱為差分約束( difference constraints )系統。
\(x_1-x_0 <= 2\)①
\(x_2-x_0 <= 7\)②
\(x_3-x_0 <= 8\)③
\(x_2-x_1 <= 3\)④
\(x_3-x_2 <= 2\)⑤
然后上邊的一坨式子就可以變成一個每行只有一個1和-1其余都是0的矩陣
亂搞操作:
\(x[i] - x[j] <= a[k]\)
\(x[i] <= x[j] + a[k]\)
令\(a[k] = w(j, i)\), 則\(x[i] <= x[j] +w(j,i)\)
令\(i = v, j = u,d=x\)
\(d[v]<=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)>=d[v] ;\)
對於每個不等式 x[i] - x[j] <= a[k],對結點 j 和 i 建立一條 j -> i的有向邊,
邊權為a[k],求x[n-1] - x[0] 的最大值就是求 0 到n-1的最短路。
二、可以從三角不等式上看
\(B-A <= c\)①
\(C - B <= a\)②
\(C-A <= b\)③
然后我們就可以轉化成三角不等式上來了...
我們想要知道\(C - A\)的最大值,通過\(① + ②\),可以得到 \(C - A <= a + c\),
所以這個問題其實就是求\(min(b, a+c)\)
三角不等式推廣到\(m\)個,變量推廣為\(n\)個,就變成\(n\)個點\(m\)條邊的最短路問題.
三、判斷是否有解:
最短路,會出現負權圈或者根本就不可達的情況,所以在不等式組轉化的圖上也有可能出現上述情況
,差分約束系統的解有三種情況:
1、有解;
2、無解;
3、無限多解;
1、x[t]-x[s] 最大值不存在
因為里邊有一個負環,所以就在環里邊出不來了
2、x[4]-x[1] 最大值無限大
因為兩邊都不相連,然后你自己吧那個不等式寫出來之后會發現,如果你約一下分,那么會出現一個恆等式
四、最小值問題
\(B-A <= c\)①
\(C - B <= a\)②
\(C-A <= b\)③
如果我們把不等式的符號改變一下那么求得最短路那不就是變成了最長路問題嗎,
那么我們在做題的時候只需要把spfa中的松弛操作的符號變一下就行了....
五、不等式的標准化
1>如果給出的不等式有"<="也有">=" :
如果需要求的是兩個變量差的最大值,那么需要將所有不等式轉變成"\(<=\)"的形式,建圖后求最短路;
相反,如果需要求的是兩個變量差的最小值,那么需要將所有不等式轉化成"\(>=\)",建圖后求最長路。
2>如果有形如:A - B = c 這樣的等式呢?
我們可以將它轉化成以下兩個不等式:
\(A - B >= c\) ①
$A - B <= c $ ②
再通過上面的方法將其中一種不等號反向,建圖即可。
3>如果這些變量都是整數域上的,那么遇到A - B < c這樣的不帶等號的不等式怎么辦呢?
我們可以將它轉化成"\(<=\)"或者"\(>=\)"的形式,即 \(A - B <= c - 1\)形式就可以做了...
奉上幾個練習題
一堆雜題
hdu 3592 World Exhibition $\ \ \ \ \ \ \ \ \ \ $ ★★☆☆☆ 題解 最短路模型 + 判負環
hdu 3440 House Man $\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $ ★★☆☆☆ 題解 最短路模型 + 判負環
poj 1364 King $\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $ ★★☆☆☆ 差分約束系統 - 最長路模型 + 判正環
poj 1932 XYZZY $\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $ ★★☆☆☆ 最長路 + 判正環
hdu 3666 THE MATRIX PROBLEM $\ $ ★★★☆☆ 差分約束系統 - 最長路模型 + 判正環
poj 2983 Is the Information Reliable? ★★★☆☆ 差分約束系統 - 最長路模型 + 判正環
poj 1752 Advertisement $\ \ \ \ \ \ \ \ \ \ \ \ \ \ $ ★★★☆☆ 限制較強的差分約束 - 可以貪心求解
hdu 1529 Cashier Employment $\ \ \ \ \ \ $ ★★★☆☆ 二分枚舉 + 差分約束系統 - 最長路模型
hdu 1534 Schedule Problem $\ \ \ \ \ \ \ \ \ \ $★★★☆☆ 差分約束系統 - 最長路模型
ZOJ 2770 Burn the Linked Camp $\ \ \ $ ★★★☆☆
hdu 4109 Instrction Arrangement $\ \ \ \ $ ★★★☆☆