1. 程式人生 > >差分約束系統

差分約束系統

如果 三角形 最長 問題 [] 原理 不等式 個數 單源最短路

差分約束系統就是給出一些形如x-y<=b不等式的約束,問你是否有滿足問題的解,或者求最小,最大解。

(以下(a,b,c)表示從a向b連一條權值為c的邊

一.原理

對於圖論的最短路徑,有:d(v) <= d(u) + w(u, v) ,而差分約束系統的解法利用到了單源最短路徑問題中的三角形不等式。

移項得:d(v) - d(u) <= w(u, v),是不是和上面的x-y<=b的一樣?

二.建圖

分兩種情況討論

(1)題目要求最大解

我們把題目給出的不等式轉化成x-y<=b的形式,把d設成無窮大,連一條(y,x,b)的邊,使用最短路

為什麽?

d[]一開始為無窮大,圖最短路更新的條件為: if(d[v]>d[u]+w(u,v)) d[v]=d[u]+w(u,v);

通過不斷的松弛,使得d的值不斷變小,直到滿足所有條件時,就是最大的了

(2)題目要求最小解

我們把題目給出的不等式轉化成x-y>=b的形式,把d設成無窮小,連一條(y,x,b)的邊,使用最長路

三.技巧與註意

1.轉化不等式

(1)a==b => a>=b , a<=b

(2)a-b<c (a,b為整數) => a-b<=c-1

(3)a-b>c (a,b為整數) => a-b>=c+1

2.註意不連通的圖

3.註意判負環(最短路),正環(最長路)

在SPFA中,如果一個點入隊超過n(點的個數)次,那麽該圖存在負(正)環

差分約束系統