POJ3169 Layout 差分約束

2022-04-06 11:56:51 字數 1215 閱讀 2083

題目鏈結。

分析:對於任意i號奶牛,1<=id[i+1] - d[i] >= 0

對於每個好感的描述(i,j,k),假設i<=j,體現到距離上的要求就是:

d[j] - d[i] <= k

對於每個反感的描述(i,j,k),假設i<=j,體現到距離上的要求就是:

d[j] - d[i] >= k

寫成我們約定的形式:

d[i] - d[i+1] <= 0 

d[j] -d[i ]<= k

d[i] - d[j] <= - k

1.對於差分不等式,a - b <= c ,建一條 b 到 a 的權值為 c 的邊,求的是最短路,得到的是最大值(本題求的就是最大值),對於不等式 a - b >= c ,建一條 b 到 a 的權值為 c 的邊,求的是最長路,得到的是最小值。

2.如果檢測到負環,那麼無解。

3.如果d沒有更新,那麼可以是任意解。

bellman ford ac**如下:

#include #define maxn 1010

#define maxm 20010

const

int inf = (1

<<24

);struct

nodeedge[maxm];

intn, m, top, d[maxn];

void

init()

void sort(int *a, int *b)

}void add(int u, int v, int

w)int

bellman_ford()}}

for(j=0; j//

檢測負環

u =edge[j].u;

v =edge[j].v;

w =edge[j].w;

if(d[u] < inf && d[u]+w}

return1;

}int

main()

for(i=0; i)

if(bellman_ford() == 0

)

else

if(d[n] ==inf)

else printf("

%d\n

", d[n]);

return0;

}

POJ 3169 Layout(差分約束)

題目大意 當排隊等候餵食時,奶牛喜歡和它們的朋友站得靠近些。fj有n 2 n 1000 頭奶牛,編號從1到n,沿一條直線站著等候喂 食。奶牛排在隊伍中的順序和它們的編號是相同的。因為奶牛相當苗條,所以可能有兩頭或者更多奶牛站在同一位置上。即使說,如果我們想象奶牛是站在一條數軸上的話,允許有兩頭或更多...

POJ3169 Layout 差分約束)

題意 一堆牛在一條直線上按編號站隊,在同一位置可以有多頭牛並列站在一起,但編號小的牛所佔的位置不能超過編號大的牛所佔的位置,這裡用d i 表示編 號為i的牛所處的位置,即要滿足d i d i 1 0,同時每兩頭牛之間有以下兩種關係 對於輸入的a b d來說 1 如果是喜歡關係 即需要滿足d b d ...

POJ 3169 Layout 差分約束

題意 有n頭牛,這些牛都擁有乙個屬性x表示其在座標軸上的座標。現在給定ml組約束條件表示a b兩頭牛座標之差不能夠超過c md組約束條件表示a b兩頭牛座標之差不能小於c,現在問1和n號牛之間最長的距離為多大,如果存在則輸出最大長度,如果任意輸出 2,如果已知條件存在矛盾輸出 1。解法 根據已知條件...