POJ 3169 Layout 差分約束

2022-05-28 07:21:10 字數 948 閱讀 5168

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

解法:根據已知條件建立約束系統,問題在於形容兩個點之間的距離看似是一種雙向邊的關係,但是如果一旦建立雙向的負邊那麼就會發生錯判了,這顯然是錯誤的,因此我們只能夠建立單向的邊。為每乙個點都選擇乙個參考點,我選擇n號點作為參考點,那麼每個點的相對距離就變成了與n號點的距離之差,所有邊就都成為了從編號小的點指向編號大的點,這樣便就是單向的了。加上隱含條件,兩點之間的距離不能為負數,圖就構好了。

**如下:

#include #include 

#include

#include

#include

using

namespace

std;

intn, ml, md;

int idx, head[10005

];struct

edge e[

2050005

];void insert(int a, int b, int

ct)

#include

int dis[10005], cnt[10005

];char vis[10005

];bool

spfa() }}

}return

true;}

intmain()

for (int i = 0; i < md; ++i)

if(!spfa())

else

if(dis[1] == 0x3f3f3f3f

)

else

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

POJ3169 Layout 差分約束

題目鏈結。分析 對於任意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 ...