前些日子,看了下這個差分約束系統,今天刷了幾道題目,就稍微總結下。
有x1,x2,x3.....xn這些未知量,出現一系列xi-xj<=k(k是常量,題目給出)的不等式,問這些等式有沒有解,或者求xn-x1的最大值(最小值)。就可以向差分約束系統方面考慮。
附註:有時候是給出xi-xj>=k,那就轉化成xj-xi<=-k。有時候給xi-xj=k,那就轉成xi-xj>=k並且xi-xj<=k。有時候給xi-xj第一種:如何判斷這些等式是否有解,把所有不等式轉換成xi-xj<=k的形式後,對每個xi-xj<=k,點j向點i連一條邊權為k的邊(單向邊),建立圖後,看情況考慮要不要設立乙個源點s,讓點s連向其他所有的點(單向邊),邊權0,對點s跑一次spfa,看看是否會出現負環(如何利用spfa判負環參考大白書)。出現負環無解,否則有解。想想看,其實出現負環就相當把幾個等式相加,然後出現了0<=負數的情況。
第二種: 求xn-x1的最大值,全部轉換成xi-xj<=k的形式,然後設源點x1的值為0,然後以x1為源點跑spfa求最短路(初始化其他xi=inf)求出xn。
第三種:求xn-x1最小值,全部轉換成xi-xj>=k形式,設x1=0,以x1為源點跑spfa求最長路(初始化其他xi=-inf),求xn。
例題:poj1324,
有乙個序列s=,現在給出一些不等式
使得ai+a(i+1)+a(i+2)+.......+a(i+ni)>ki或者ai+a(i+1)+a(i+2)+.......+a(i+ni)lamentable kingdom,不滿足就輸出successful conspiracy。
ai+a(i+1)+a(i+2)+.......+a(i+ni)>ki轉換成ai+a(i+1)+a(i+2)+.......+a(i+ni)>=ki+1轉換成sum[i+ni]-sum[i-1]>=ki+1轉換成sum[i-1]-sum[i+ni]<=-1-ki
ai+a(i+1)+a(i+2)+.......+a(i+ni)ai+a(i+1)+a(i+2)+.......+a(i+ni)<=ki-1轉換成sum[i+ni]-sum[i-1]<=ki-1
然後像上面我說的那樣建立圖,然後spfa跑看看是否出現負環,是的話就無解,否則有解。
poj3159
有一批糖果要由班長flymouse分發給班裡的小朋友,給出m對資料u,v,w,表示第u個小朋友不能比第v個小朋友少w個,但flymouse與snoopy不和,所以在滿足上述約束的條件下,flymouse要盡量比snoopy多。而對於其他小朋友而言,則只希望自己得到的糖果不少於班上某某其他人就行了。
分析:因此根據題意,可以列出如下的不等式:
sbi-sai<=ci(1=最終要使得sn-s1最大。
那就是我上面我總結的第二種。
poj2983(題意略)
第一種,不過有個關於等號的處理,題目給xi-xj=k,那就是轉換成同時滿足xi-xj<=k,xi-xj>=k(第二個轉換xj-xi<=-k)
poj3169挑戰有,省略。
poj1201,1716是第3種,注意sum[i+1]-sum[i]<=1的情況!
差分約束系統
差分約束 若 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 ...
差分約束系統
差分約束系統 對於差分不等式,a b c 建一條 b 到 a 的權值為 c 的邊,求的是最短路,得到的是最大值 對於不等式 a b c 建一條 b 到 a 的權值為 c 的邊,求的是最長路,得到的是最小值 存在負環的話是無解 求不出最短路 dist 沒有得到更新 的話是任意解 第三 一種建圖方法 設...
差分約束系統
差分約束系統 x1 x2 0 x1 x5 1 x2 x5 1 x3 x1 5 x4 x1 4 x4 x3 1 x5 x3 3 x5 x4 3 不等式組 1 全都是兩個未知數的差小於等於某個常數 大於等於也可以,因為左右乘以 1就可以化成小於等於 這樣的不等式組就稱作差分約束系統。這個不等式組要麼無解...