差分约束系统——建模与求解
?如果一個系統由n個變量和m個約束條件組成,其中每個約束條件形如:xj-xi<=bk,其中,1<=i,j<=n, 1<=k<=m。則稱其為差分約束系統(System of difference constraints)。差分約束系統就是求解關于一組變量的不等式組的方法。
??? 求解差分約束系統,可以轉化為圖論中的單源最短路徑問題。
??? 觀察約束條件xj-xi<=bk,會發現它類似于最短路中的三角不等式d[u]<=d[v]+w[u,v](即d[u]-d[v]<=w[u,v])。因此,以每個變量xi為結點,對于約束條件xj-xi<=bk,連接一條邊(i,j),邊權為bk。再增加一個源點s,s與所有的點相連,邊權為0。對這個圖,運行以s為起點的bellman-ford(或者spfa),最終{d[i]}即為一組可行解。
引理:設x=(x1,x2,…,xn)是差分約束系統Ax≤b的一個解,d為任意常數。則x+d=(x1+d,x2+d,…,xn+d)也是該系統Ax≤b的一個解。
?
?
?
poj3159:發蘋果問題。flymouse是班長,他需要給每個同學發一定數量的蘋果,但是學生之間會有比較,有的學生(編號為a)認為某個學生b的蘋果數不能超過他v個(Sb-Sa<=v)。flymouse的編號為1,現在要求滿足學生要求,并且使S1 - Sn最大。
解:從a到b連接一條有向邊,權值為v。以1為起始點,求到每個點的最短路徑,最終dis[n]即為所求。
?
poj1364:有一個國王,它只會算連續的數的加法,假設一串數{a1,a2,...an},給出條件si,ni,operator,ki,意思是從si到si+ni這段數的和>或者<ki。現在又n組這樣的條件,判斷這些條件是否存在矛盾。
解:設S[i]表示從串開頭1到i的和,S[0]=0,則條件可轉化為:S[ni+si] - S[si-1] > ki(or <)。由于S[i]均為整數,可以轉化為:S[ni+si] - S[si-1] >= ki?+ 1(or <= ki-1)。先將條件全部轉化為<=形式,再添加超級源點n+1,到其余各點連接一條邊,權值為0。利用spfa判斷負環的存在。
?
poj2983:有兩個敵對勢力,a方想弄清楚b方的n個防御站的位置,通過一些地下組織。地下組織提供多條情報,你要判斷這些情報是否可靠。情報分為兩種:P A B X:A站在B站北邊X公里;V A B:A站在B站北邊至少1公里,但具體多遠不清楚。現在給出n個站和m條情報,判斷這m條情報是否可靠。
解:設S[i]表示i站距離最南邊的距離,S[0]=0,則情報可以轉化為S[A]-S[B]<=X&&S[A]-S[B]>=X;S[A] - S[B]>=1。首先將這些不等式全部轉化為<=,求最短路用bellmanford判斷負環。
?
poj1201:給出n(n=50000)段連續的整數(整數均小于50000),要求出一個最小的集合Z,至少包含第i段里面ci個數。
解:S[i]表示Z集合從0到i-1中取的整數的個數。對于段[a,b]取不小于c個數,則有:S[b+1]-S[a]>=c。顯然,這是求最長路。(用spfa注意添加源點)
有關差分約束系統建模問題,可參
總結
以上是生活随笔為你收集整理的差分约束系统——建模与求解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络流之——最小费用最大流
- 下一篇: poj2516 最小费用最大流