在通用線性規劃問題中,我們通常給定乙個矩陣a
aa,和乙個未知向量→
x\underset
x→,和乙個已知向量→
b\underset
b→。求解矩陣不等式ax≤
bax \leq b
ax≤b
。有時候我們並不關心目標函式,而是希望計算出乙個可行解(或告知無解)。
在乙個差分約束系統中,線性規劃矩陣a
aa每乙個都有且僅有乙個1和-1,其他位置均為0。因此,由ax≤
bax \leq b
ax≤b
所給出的差分約束系統是由m個約束條件,n個變數的差額限制條件,其中每乙個約束條件都是類似於下面的不等式xi−
xj≤b
kx_ - x_ \leq b_
xi−xj
≤bk
,其中m為a的行數,n為a的列數,1≤i
,j≤n
,i≠j
1 \leq i,j \leq n,i \neq j
1≤i,j≤
n,i
=j並且1≤k
≤m
1 \leq k \leq m
1≤k≤m。
定理:如果x
xx是差分約束系統的乙個可行解,那麼對於任意整數d
dd,則向量x+d
ix+di
x+di
同樣是差分約束系統的乙個可行解,其中i
ii為全部元素都是1的向量。
將d加到每乙個xix_
xi上面,對於約束條件做減法的時候,d就會被消掉,因此加上乙個常數向量還是乙個可行解。
給定差分約束系統,其對應的約束圖是有向圖g=(
v,e)
g=(v,e)
g=(v,e
),v=(v
0,v1
,⋯,v
n)
v=(v_,v_,\cdots,v_)
v=(v0
,v1
,⋯,v
n),e=∪
e=\,v_):x_ - x_ \leq b_ \} \cup \,v_) , (v_,v_) , \cdots ,(v_,v_)\}
e=∪。
對於權值函式w
ww的定義,w0j
=0,w
ij=b
kw_ = 0,w_ = b_
w0j=0
,wij
=bk
。下面的定義將把差分約數系統和圖論最短路建立關係。
定理:差分約數系統的乙個可行解為,x=(
δ(v0
,v1)
,δ(v
0,v2
),⋯,
δ(v0
,vn)
)x=(\delta(v_,v_),\delta(v_,v_),\cdots,\delta(v_,v_))
x=(δ(v
0,v
1),
δ(v0
,v2
),⋯
,δ(v
0,v
n))
證明:考慮任意一條邊(vi
,vj)
(v_,v_)
(vi,v
j),根據三角不等式有,δ(v
0,vj
)≤δ(
v0,v
i)+w
ij
\delta(v_,v_) \leq \delta(v_,v_) + w_
δ(v0,
vj)
≤δ(v
0,v
i)+
wij
,即δ (v
0,vj
)−δ(
v0,v
i)≤w
ij
\delta(v_,v_) - \delta(v_,v_) \leq w_
δ(v0,
vj)
−δ(v
0,v
i)≤
wij
,又因為xi=
δ(v0
,vi)
,xj=
δ(v0
,vj)
x_ = \delta(v_,v_),x_ = \delta(v_,v_)
xi=δ(
v0,
vi)
,xj
=δ(v
0,v
j),因此xj−
xi≤w
ij=b
kx_ - x_ \leq w_ = b_
xj−xi
≤wi
j=b
k。定理:如果約束圖存在負權環,則差分約束系統無解。
證明:反證法,詳情檢視《演算法導論》。
可以選擇執行一遍bellmanford演算法,也可以進行spfa優化。
p1993
注意條件轉化,在求解dndn
dn陣列的時候,注意到初始化不能設定成最大的陣列,否則相加的時候會出現溢位的問題。
以下是bellman-ford判斷負環演算法。
#include
using
namespace std;
typedef
long
long ll;
#define fr freopen("in.txt", "r", stdin)
struct edge
e[20005];
ll dn[
6000];
int tot =0;
int n, m;
inline
void
add(
int u,
int v, ll w)
intmain()
else
if(op ==2)
else
if(op ==3)
}for
(int i =
1; i <= n; i++
) dn[0]
=0;// negi loop
for(
int cnt =
0; cnt < n; cnt++)}
}for
(int i =
1; i <= tot; i++)}
cout <<
"yes"
;return0;
}
差分約束系統
差分約束 若 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就可以化成小於等於 這樣的不等式組就稱作差分約束系統。這個不等式組要麼無解...