目錄將邊權取相反數,設此時圖為 \(g'\)。若 \(g'\) 無負權環(即 \(g\) 無正權環),則有 \(d'[v]\le len'[v]\),其中 \(d'[v]\) 為在圖 \(g'\) 上求得的最短路,\(len'[v]\) 為源點到 \(v\) 的任意路徑權值和。同時可得 \(-d'[v]\ge len[v]\),所以可以得到 \(d[v]=-d'[v]\),其中 \(d[v]\) 為原圖源點到 \(v\) 的最長路。
實際上,由於最短路有:
if(d'[v]>d'[u]+w'(u,v))
d'[v]=d'[u]+w'(u,v)
我們可以將其改寫為:
if(d[v]
不過,由此看出若 \(g\) 有正邊,相當於 \(g'\) 有負邊,而 \(g'\) 的最短路等價於 \(g\) 的最長路,此時不能用 \(\mathtt\),只能用 \(\mathtt\)。
如果求最大值。
對於條件 \(x_i-x_j\le k\),建一條從 \(j\) 到 \(i\) 的權值為 \(k\) 的邊。求最短路。負環無解。
如果求最小值。
對於條件 \(x_i-x_j\le k\),建一條從 \(i\) 到 \(j\) 的權值為 \(-k\) 的邊。求最長路。正環無解。
例 1.\(\text\)
求最大值,則按小於等於建圖求最短路。負環無解。
有兩個限制:
相鄰房子距離至少為 \(1\)。
相鄰高度房子距離至多為 \(d\)。
最後需要注意,查詢時應查詢編號小的房子到編號大的房子的距離,如果反過來查根據我們的建圖得到的值應該是負值。
例 2.
\(\text\)
求最大值,則建圖求最短路。負環無解,這是由於求最短路實際上是卡著限制跑,如果這樣自己都要仰慕自己,就無解了。
對於限制 \(|a_i-a_j|=1\),可以拆成 \(|a_i-a_j|\le 1\) 且 \(|a_i-a_j|\ge 1\)。
繼續拆成四個條件:\(a_i\le a_j+1\) 或 \(a_i\ge a_j-1\),\(a_j\le a_i-1\) 或 \(a_j\ge a_i+1\)。
顯然,我們不能從前一對與後一對的限制中分別選乙個,組合來搞,這樣的邊數組合是指數級的。不妨先選擇最弱的一組條件:\(a_i\le a_j+1,a_j\le a_i+1\),其實也就是保證 \(|a_i-a_j|\le 1\)。現在我們驚喜地發現,不合法的情況其實也就是 \(i\rightarrow j\) 的邊權為零!
那麼考慮什麼情況下必須填零。考慮如果不是環,那麼一定可以填 \(1\)。這樣問題就簡單了:由於合法邊權為 \(1\),那麼只有偶環有解,奇環一定會出現零邊!
用 \(\mathtt\) 找出最大值,並查集維護二分圖即可。
\(\sf p.s.\) 之前自己沒搞懂,今天回來又看了一遍終於想明白了!
例 3.
倍殺測量者
題意描述:給出一系列不等式
\[x_\ge (k_i-t)\cdot x_\text(k_i+t)\cdot x_>x_
\]以及一些 \(x_i\) 的值。
求出最大的 \(t\) 使得其無解。
首先想到二分 \(t\),然後判定有無解。可以將連邊方式轉化為 "乘除" 或 "對數"。
什麼樣的情況會導致無解呢?以 "對數" 的正負為例(其實 "乘除" 也是一樣的,"對數" 的正對應其 \(\ge 1\);反之對應 \(<1\)),假設跑最長路,就是 \(v\ge u+w\),如果最終找到了正環,不等式就無法成立,因為自己無法大於自己。最短路同理。
另外對於一些固定的值可以這樣處理:建出虛點 \(0\),"對數" 就賦值為零。連雙向邊即可。
筆記 差分約束系統
是個啥?如果乙個系統由 n 個變數和 m 個約束條件組成,形成 m 個形如 x i y i leq k 的不等式 i,j in 1 n k 為常數 則稱其為差分約束系統 system of difference constraints 亦即,差分約束系統是求解關於一組變數的特殊不等式組的方法。說句人...
差分約束系統學習筆記
差分約束系統中的每個約束條件是形如如下所示的簡單不等式 xj xi bk。例如,求解不等式組 x1 x5 1 x2 x5 1 x3 x1 5 x4 x1 4 x4 x3 1 x5 x3 3 x5 x4 3 該問題的乙個解為x 5,3,0,1,4 另乙個解y 0,2,5,4,1 這2個解是有聯絡的 y...
差分約束系統學習筆記
差分約束系統 1.演算法用途 解決形如這樣一組不等式 left x x leq 0 x x leq 1 x x leq 1 x x leq 5 x x leq 4 x x leq 1 x x leq 3 x x leq 3 end right.這種不等式的特點是 1.都是兩個數的差小於等於某個常數 ...