差分約束系統 note

2022-05-25 03:51:10 字數 2387 閱讀 2050

【題目描述】

最近有一款很火的遊戲,叫做八分音符醬,它和馬里奧很相似,不過它的跳躍距離是由你的聲音大小來控制

的。不過我們現在對玩法就行一些修改:

現有一共有n 個柱子,兩個相鄰的柱子之間的初始水平距離為1,蠢蠢的jyb 現在在最矮的柱子上,他每次

只能向恰好比這個柱子高的另乙個柱子跳躍,最後要跳到最高的柱子上。

jyb 需要從第二個柱子跳到第乙個柱子,再跳到第三個柱子。

jyb 的最大聲音為d,代表他能在滿足 |posi-posj| + |heighti-heightj | ≤d  的兩個柱子之間跳躍。

假設我們可以在不改變它們位置的相對順序的前提下水平移動柱子,調整他們的水平位置(但相鄰間隔至少為1,且為整數)。

jyb 想問你:在能從最矮柱子跳到最高柱子的前提下,它們(最矮柱子跳到最高柱子) 的最大水平距離是多少。

【輸入描述】

第1 行,1 個整數t, 表示資料組數,對於每組資料:

第1 行,1 個整數n;m,表示一共有多少個柱子。

接下來1 行,有n 個數,hi 表示柱子的高度。保證柱子高度互不相同

【輸出描述】

對於每組資料,輸出在能從最矮柱子跳到最高柱子的前提下,它們的最大水平距離是多少。如果不能,輸出-1

【輸入樣例1】

23 4

3 2 4

3 43 2 6

【輸出樣例1】

-1【輸入樣例2】

25 10

4 2 1 8 10

5 210 8 2 1 4

【輸出樣例】

-1【資料範圍及約定】

對於30% 的資料,1 n 100,1 d 1000,1 hi 1000;

•對於100% 的資料,1 t 100,1 n 103,1 d 106,1 hi 106。

我們不能隨意地將水平位置拉開,因為必須要能夠從最矮的柱子跳到最高的柱子。

其實就相當於有了很多限制條件,顯然這是乙個差分約束系統。

先根據柱子的高度排序(初始化時用結構體記錄高度和位置)

我們約定,在相鄰兩柱子,從下標小的向大的建邊(以下用u(下標小),v(下標大)表示)

我們有兩個約束條件:

1..根據題意:pos[v]-pos[u]+height[v]-height[u]≤d

2..兩個相鄰的柱子之間距離最少為1::pos[v]-pos[u]≥1

整理後得到 

pos[v]-pos[u]≤d-(height[v]-height[u])

於是建邊分為兩種:

1.從i 到i+1建邊,長度為 d-(height[v]-height[u])

2.從i+1到i建邊,長度為-1

#include#define maxn 1005

using

namespace

std;

struct

node

e[maxn

<<1

];struct

node1

a[maxn];

intt,n,d,tot,flag,st,ed;

int dis[maxn],head[maxn],in

[maxn];

bool

vis[maxn];

queue

q;bool cmp(const node1 &x,const node1 &y)

void add(int u,int v,int

w)int spfa(int st,int ed)//

找最短路 }}

}return

dis[ed];

}int

main()

tot=0,flag=1

; memset(head,

0,sizeof

(head));

sort(a+1,a+n+1

,cmp);

//找到起點和終點

st=min(a[1

].pos,a[n].pos);

ed=max(a[1

].pos,a[n].pos);

for(int i=1;i<=n-1;++i)

add(u,v,d-a[i+1].h+a[i].h);

}if(flag) printf("

%d\n

",spfa(st,ed));

else printf("

-1\n");

}}/*

23 4

3 2 4

3 43 2 6

*/

完結撒花!

差分約束系統

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