淺談差分約束問題
阿新 • • 發佈:2018-03-06
最短 HR .html 求解 不難 pos 表示 聯想 html 連一條邊權為\(k\)的邊,跑最
差分約束
差分約束是解決這樣一類問題
給出\(n\)個形如\(x[j]-x[i]<=k\)的式子,求\(x[n]-x[1]\)的最大/最小值
思路
其實這個問題是挺套路的
我們把給出的式子變一下
\(x[j]-x[i]<=k\)
\(x[j]<=x[i]+k\)
我們不難聯想到圖論中最短路的性質
假設\(d[x]\)表示\(1\)到\(x\)的最短路
那麽對於任意一條邊\((u,v)\)
有\(d[v]<=d[u]+k\)(k表示邊權)
可能有些抽象,舉個例子
經過計算不難得到三個不等式
1.(3) x3 - x0 <= 8 2.(2) + (5) x3 - x0 <= 9 3.(1) + (4) + (5) x3 - x0 <= 7
這樣的話,我們在滿足條件的情況下\(x[3]-x[0]\)最大為\(7\)
我們按上面的方法建出圖
不難發現圖中的最短路就是我們想要的答案!
難道這是巧合麽?
肯定不是。仔細觀察不難發現,我們連邊的過程其實就是在轉換不等式,求最短路其實就是求最小的限制條件。這樣求出來的最短路即為滿足條件的最大值
總結
這玩意兒其實挺套路的
如果你找出了題目中的限制條件,直接建圖就好
最大值—>把所有式子整理為\(x[j]-x[i]<=k\),從\(i\)向\(j\)連一條邊權為\(k\)的邊,跑最短
路
最小值—>把所有式子整理為\(x[j]-x[i]>=k\),從\(i\)向\(j\)
長
路
在求解的時,因為經常要判斷負環,所以選用SPFA算法
當一個點的入隊次數超過\(n\)時必定出現負環
例題
幾道水題
POJ1201
POJ1275
HDU3440
還有兩道\(n\)年以前做的,沒寫題解
洛谷P1993
洛谷P3275
淺談差分約束問題