不等式組中每乙個不等式形式如下:
\[x_i ≤ x_j + c_k
\]其中,\(x_i\) 和 \(x_j\) 是自變數, \(c_k\)是因變數。
我們可以模擬一下之前的最短路問題,假設存在一條從 \(j\)走到 \(i\),邊權為 \(c\)的邊。在進行最短路計算時,只要遇到 \(dist[j] > dist[i] + c\),我們就將 \(dist[j]\)更新為 \(dist[i] + c\)。因此,當做完最短路之後,對於所有的 \(j\),都有 \(dist[j] ≤ dist[i] + c\)
如果給我們乙個圖,我們可以把每條邊看成乙個不等式,那麼我們在這個圖上求一遍起點到所有點的最短距離(注意從起點出發,一定能走到所有的邊,因為如果走不到所有的點,就不可能完成求單源最短路的任務,就有個別點走不到嘛),求完之後每個邊的不等式都是滿足的。那麼,任何乙個最短路問題,都可以轉換為乙個不等式組。那麼反過來也一樣,乙個不等式組也可以轉換為乙個最短路問題。
數缺形時少直觀,形少數時難入微-華羅庚
因此,我們在解不等式組問題的時候,遇到乙個不等關係,就將它處理成為 x i ≤ x j + c k x_i ≤ x_j + c_kxi
≤xj+c
k的格式,然後建立 j → i j→ij→i 權值為 c k c_kck
的一條邊。之後我們在這個圖上,隨便選擇起點(該起點需要滿足從該點出發,一定可以走遍所有的邊),求一下每個點到起點的最短距離,求完之後,所有的不等關係都會滿足。
求不等式的可行解
綜上所述,我們可以總結出差分約束求不等式可行解的做法:
源點需要滿足的條件:從源點出發,一定可以走到所有邊(某個點走不到沒有關係,因為從數學的角度,某個點就是某乙個變數,既然沒有邊與它相連,它就沒有任何約束)。
步驟:先將每個不等式 x i ≤ x j + c x_i ≤ x_j + cxi
≤xj+c 轉換成一條 j → i j→ij→i 長度為 c cc 的一條邊
找乙個虛擬源點,使得該源點一定可以遍歷到所有邊
從虛擬源點求一遍 單源最短路
注意:並不是所有圖都存在最短路,圖中可能存在負環,如果存在負環對應到不等式中就是無解。
因此,建圖完畢以後,做一次最短路,只有兩個結果:
(1)如果存在負環,那麼該不等式組一定無解
(2)如果不存在負環,則 d i s t [ i ] dist[i]dist[i] 就是原不等式組中 x i x_ixi
的乙個可行解
求滿足不等式組中每乙個變數的最值
只記結論: 如果求的是最小值,則應該求最長路;如果求的是最大值,則應該求最短路。為什麼呢?以求 x i x_ixi
的最大值為例:求所有從 x i x_ixi
出發,構成不等式鏈 x i ≤ x j + c 1 ≤ x k + c 2 + c 1 ≤ . . . ≤ . . . ≤ c 1 + c 2 + . . . + c k x_i≤x_j+c_1≤x_k+c_2+c_1≤...≤...≤c1+c2+...+c_kxi
≤xj+c
1≤xk
+c2
+c1≤...≤...≤c1+c2+...+ck
,通過做最短路以後可以確定 x i x_ixi
的一系列上界,最終 x i x_ixi
的最大值就等於所有上界中的最小值。
最長路的建圖方式和2節中最短路的建圖方式一樣,把不等式轉換成 x i ≥ x j + c x_i ≥ x_j + cxi
≥xj+c, 建立一條 j → i j→ij→i 長度為 c cc 的一條邊(最短路只看≤,最長路只看≥)。
我們知道,如果不等式組中僅僅包含不同變數之間的大小關係,那麼我們求出的可行解一定是乙個包含變數的相對關係,它不存在乙個極值的概念。
因此,一旦題目讓我們求滿足不等式關係的極值,那麼一定會在不等式組中加入形如 x i ≤ c x_i ≤ cxi
≤c 或 x i ≥ c x_i ≥ cxi
≥c 這樣的條件(小於還是大於看求最短路還是最長路),這樣才能確定最後不等式組的邊界,得到極值。那麼,如何處理形如這種單變數常數關係呢?
【問題】如何轉化形如 x i ≤ c x_i ≤ cxi
≤c,其中 c cc 是乙個常數的這類關係?
答:建立乙個虛擬源點 0 00,轉換為 x i ≤ x 0 + c x_i≤x_0+cxi
≤x0+c,然後建立 0 → i 0→i0→i,長度是 c cc 的邊。
K Candies 差分約束 最短路)
有n個孩子,m個關係 關係分別有3個數u,v,w。代表v的糖果數不能多於u w個,也就是dis v dis u w 這就轉換成 if dis v dis u w dis v dis u w.1 spfa stack include include include include includecon...
2018 08 07 最短路徑 差分約束
在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n表示成都的大...
差分約束系統 變相的最短路
之前沒有細看,想不明白這個問題怎麼和最短路扯上關係,細細看了看,也沒明白,原因是在看dijk演算法的時候就沒好搞明白它的 實現,以至於這個問題模擬到最短路實現的時候一臉懵,還去瞅了瞅三角不等式是什麼東西,簡單來說,難就難在圖的構造上面,構造好圖之後就是模板,就是之前的內容了,一起看看這個東西吧,on...