一、內容:
有n個變數,m個約束條件組成的不等式組成的系統,稱為差分約束系統。
差分約束系統就是將這些不等式的關係轉換為圖,用最短路的方法求解。
二、常見問題即求解方法
1、求出這些不等式中的最小值:
解法:將不等式轉化為a-b>=c的形式,建立b->a的邊,長度為c,然後求出最長路徑,最長路徑的解就是結果。
2、求出不等式中的最大值
解法:將不等式裝化為a-b<=c的形式,建立b->a長度為c的邊,然後求出最短路,最短路徑的解就是結果。
3、求出不等式是否存在解
解法:找乙個源點,然後根據題中已有關係建立源點到所有點的距離,然後求解這個源點到所有點
的距離求出最大解或最小解,如果圖中存在環則說明好、這些不等式不存在解。
三、常見問題:
1、注意重邊
2、題中的隱含條件建立邊
3、注意不等式的區間,是否可能存在-1的情況
4、建立源點可以避免出現距離為-inf後inf的情況。
5、用spfa時,有時用堆疊代替佇列會更快。
四、練習
1、poj 1716
2、洛谷 p3275
3、poj 2983
4、poj 1364
5、poj 3169
6、poj 3460
7、poj 1201
8、poj 1275
差分約束小結
感覺這玩意挺簡單的。出不了太難的題啊。這種奇怪的圖是可以跑最長路的,因為負環遲早要退出。一般來說要先判圖中是否存在正 負環,可以用spfa記錄每個點鬆弛次數判斷。每個點在一開始都扔進佇列,或者新建超源與點連邊均可。第二種更加有邏輯,且能處理點有初始值的情況,方式為將超源到點的邊權賦為點權,點到超源的...
差分約束小結0 0
在做poi的時候看到一題要用到差分約束的.然後就興致勃勃的去學習了差分約束.結果發現那一題只是運用到了差分約束系統的性質而已.然後套個tarjan floyd 所以並沒有什麼卵用.舉個比較簡單的例子吧.n 個數,m條限制,每條限制dj di a 然後求是否存在這麼個序列.那麼就把式子化一下dj di...
差分約束系統
差分約束 若 s a s b k 建一條b到a 的長度為k的邊 若s a s b k 建一條b到a 的長度為 k的邊 是求最小值的最長路 是求最大值的最短路 注意到最短路演算法的鬆弛操作 if d j d i w i j d j d i w i j 這其中的三角形不等式 d j d i w i j ...