h yp
erli
nk
hyperlink
hyperl
ink de
scri
ptio
ndescription
descri
ptio
n 給定乙個形如xi−
xj≤y
x_i-x_j\leq y
xi−xj
≤y的n
nn元一次不等式組
求x
xx的一組整數解
s ol
utio
nsolution
soluti
on xi−
xj≤k
x_i-x_j\leq k
xi−xj
≤k
我們知道乙個最短路陣列d
dd,若有邊(i,
j)
(i,j)
(i,j
)它最後一定滿足dj≤
di+k
d_j\leq d_i+k
dj≤di
+k若有乙個最長路陣列d
dd,若有邊(i,
j)
(i,j)
(i,j
)它最後一定滿足dj≥
di+k
d_j\geq d_i+k
dj≥di
+k首先我們建邊(0,
i,0)
(0,i,0)
(0,i,0
)意義後面說
觀察到與上述不等式十分相似,可以利用spf
aspfa
spfa
判負環的思想
建立邊(j,
i,w)
(j,i,w)
(j,i,w
),跑最短路,最後可以得到d
dd最大的一組非正整數解
建立邊(i,
j,−w
)(i,j,-w)
(i,j,−
w),跑最長路,最後可以得到d
dd的一組最小正整數解
本**採用的是後者
時間複雜度:o(k
m)
o(km)
o(km
),最壞情況o(n
m)
o(nm)
o(nm)
c od
ecode
code
#include
#include
#include
#include
#include
#define ll long long
using
namespace std;
int n,m,dis[
5010
],tot,l[
5010
],in[
5010];
bool vis[
5010];
struct nodee[
20010];
inline
void
add(
int u,
int v,
int w)
;l[u]
=tot;
return;}
queue<
int>q;
inline ll read()
inline
bool
spfa
(int s)
}}vis[u]
=false;}
return
false;}
signed
main()
P5960 模板 差分約束演算法
我記得以前寫過差分約數的部落格,可是找不到了,就再寫一遍吧。a b k a b k 要求最終結果滿足這個式子,加源點跑最短路,若能跑出來,則最終一定滿足。include include include include include include include define ll long lo...
洛谷 P5960 模板 差分約束演算法(差分約束)
題目中x1 x 1 y1可以轉變為 x1 x 1 y1 換一下字母更顯然易見 dis v dis u edge i w 那麼便可以轉換成圖上的最短路問題 解集 因為題中並沒有說明是聯通圖,可以設乙個超級源點,然後向每個節點連一條邊權為0的邊,然後從0點開始做最短路。注意建邊是從x 1連向x1。ac ...
洛谷5960 模板 差分約束演算法 題解
雖然說知道這玩意可是從來沒寫過 同時記錄差分約束原理。對於給定的式子 x y le c 移動之得 x le y c 轉換為圖論模型,做起點,終點,權值為 y,x,c 的邊,可發現如果我們對這個圖跑最短路 先不要管怎麼跑出來的233 那麼一定有 dis x le dis y c 也就是說,此時每個點的...