POJ 3169 Layout (差分約束)

2022-07-25 14:57:28 字數 1256 閱讀 6538

差分約束:

形如:$x1-x2>=a,x1-x3>=b,x2-x3<=c$

出現這樣式子便要用到差分約束加最短路了。當要求$x1與x3$的最大差值時要用到最短路,所有的式子要轉換成$x1-x2<=a$的形式,當求最小值時用最長路,所有式子轉換為$x1-x2>=a$的形式。至於建圖則需要根據題意確定邊的方向。

題目大意:

n頭牛,從1到n排序,每頭牛按照序號在一條直線排隊,允許乙個位置有多頭牛,有些牛有喜歡的或不喜歡的牛,所以對彼此之間的距離有要求,要求出第1頭牛與第n頭牛之間的最大距離。

解題思路:

求最大距離,用最短路,存在負值,也就有可能有負環,用spfa。因為要判斷能不能排隊,所以要建乙個超級源點,連線所有的牛,並經過所有的邊。

**:

1 #include 2 #include 

3 #include 4 #include 5 #include 6

using

namespace

std;

7 typedef long

long

ll;8

#define debug(a) cout<<#a<<":"<9

const

int inf=0x3f3f3f3f;10

const

int n=1e6+7;11

const

int mod=1e9+7;12

intmaxn,minn;

13int

t,n;

14int

u,v,w;

15int

dis[n];

16int

vis[n];

17int

cnt[n];

18struct

aap;

21 vectormp[n];

22bool spfa(int

a)41

if(vis[p.u]==0)45

}46}47

}48return

false;49

}50intmain()

59for(int i=1;i<=m2;i++)

65for(int i=1;i)

70if

(spfa(n))

73else

78else81}

82return0;

83 }

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