洛谷 P5960 模板 差分約束演算法(差分約束)

2022-04-06 18:41:13 字數 791 閱讀 9350

題目中x1-x'1<=y1可以轉變為

x1<=x'1+y1

換一下字母更顯然易見:dis[v]<=dis[u]+edge[i].w

那麼便可以轉換成圖上的最短路問題(解集),因為題中並沒有說明是聯通圖,可以設乙個超級源點,然後向每個節點連一條邊權為0的邊,然後從0點開始做最短路。

注意建邊是從x'1連向x1。

ac**:

1 #include2 #include3 #include4 #include5

using

namespace

std;

6int

n,m,tot;

7const

int n=5005;8

struct

nodeedge[n<<1

];11

int head[n],dis[n],vis[n],in

[n];

12void add(int u,int v,int

w) 18

bool spfa(int

u)30}31

}32}33

return1;

34}35int

main()

44for(int i=1;i<=n;i++) add(0,i,0

);45

if(spfa(0)==0)

46for(int i=1;i<=n;i++) printf("

%d "

,dis[i]);

47return0;

48 }

ac**

P5960 模板 差分約束演算法

我記得以前寫過差分約數的部落格,可是找不到了,就再寫一遍吧。a b k a b k 要求最終結果滿足這個式子,加源點跑最短路,若能跑出來,則最終一定滿足。include include include include include include include define ll long lo...

P5960 模板 差分約束演算法

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 nsolut...

洛谷5960 模板 差分約束演算法 題解

雖然說知道這玩意可是從來沒寫過 同時記錄差分約束原理。對於給定的式子 x y le c 移動之得 x le y c 轉換為圖論模型,做起點,終點,權值為 y,x,c 的邊,可發現如果我們對這個圖跑最短路 先不要管怎麼跑出來的233 那麼一定有 dis x le dis y c 也就是說,此時每個點的...