差分約束系統

2021-09-28 22:15:16 字數 2649 閱讀 4814

概念: 差分約束系統是特殊的n元一次不等式組,它包含n

nn個變數,x1−

xn

x_1 - x_n

x1​−xn

​以及m

mm個約束條件,每乙個約束條件由兩個變數作差構成的,類似於xi−

xj≤a

kx_i-x_j \leq a_k

xi​−xj

​≤ak

​,需要解決的問題是找到一組解,使得給出的約束條件得到滿足。

如何解決差分約束系統 ->最短路演算法

現在已知

b −a

≤c

b - a \leq c

b−a≤cc−b

≤a

c - b \leq a

c−b≤ac−a

≤b

c - a \leq b

c−a≤

b如果現在要求c−a

c-ac−

a的最大值,那麼可以知道 max

(c−a

)=mi

n(b,

a+c)

max(c-a) = min(b,a+c)

max(c−

a)=m

in(b

,a+c

)現在我們將圖建出來,how to build?

差分約束建圖技巧

1.對於乙個全部都是≤

\leq

≤的不等式組,我們可以把式子轉化為xi≤

xj+w

(i,j

)x_i \leq x_j+w(i,j)

xi​≤xj

​+w(

i,j)

,即i ,j

i,ji,

j建邊,xj−

>xi

=w(i

,j

)x_j->x_i=w(i,j)

xj​−

>xi

​=w(

i,j)

,用最短路演算法解決問題,求得最小值

2.對於乙個全部都是≥

\geq

≥號的不等式組,我們可以將每個式子轉化為xi≥

xj+w

(i,j

)x_i \geq x_j+w(i,j)

xi​≥xj

​+w(

i,j)

,即i,

ji,j

i,j建邊,xj−

>xi

=w(i

,j

)x_j->x_i=w(i,j)

xj​−

>xi

​=w(

i,j)

,用最長路演算法解決,求得最大值

如果dis[xi]為inf或-inf,那麼xi為任意解

如果求最短路的過程**現負環,那麼說明該不等式組無解

harbin ccpc a

#include

using namespace std;

const

int maxn =

2e4+5;

const

int inf =

0x3f3f3f3f

;int n,m1,m2;

struct edgeedge[maxn<<2]

;int head[maxn]

,tot;

inline

void

addedge

(int u,

int v,

int w)

; head[u]

= tot;

}int s;

bool vis[maxn]

;struct intervalintval[maxn]

;int dis[maxn]

,in[maxn]

;inline

void

buildgraph

(int mid)

addedge(0

,n,mid)

;addedge

(n,0

,-mid)

;for

(int i =

0; i < m1+m2;

++i)

else}}

inline bool spfa

(int s)};

priority_queue pq;

pq.push

(node);

while

(!pq.

empty()

)); in[e.v]++;

if(in[e.v]

>n)

return false;

vis[e.v]

= true;}}

}}return true;

}int

main()

;}for(

int i = m1; i < m1+m2;

++i);}

int ans =0;

int l =

0,r = n;

while

(l <= r)

else l = mid +1;

}printf

("%d\n"

,ans);}

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就可以化成小於等於 這樣的不等式組就稱作差分約束系統。這個不等式組要麼無解...