BZOJ 2330 糖果 差分約束求最小值

2022-07-17 10:45:10 字數 2533 閱讀 5896

題目大意:

幼兒園裡有n個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的k個要求。幼兒園的糖果總是有限的,lxhgww想知道他至少需要準備多少個糖果,才能使得每個小朋友都能夠分到糖果,並且滿足小朋友們所有的要求。

輸入的第一行是兩個整數n,k。

接下來k行,表示這些點需要滿足的關係,每行3個數字,x,a,b。

如果x=1, 表示第a個小朋友分到的糖果必須和第b個小朋友分到的糖果一樣多;

如果x=2, 表示第a個小朋友分到的糖果必須少於第b個小朋友分到的糖果;

如果x=3, 表示第a個小朋友分到的糖果必須不少於第b個小朋友分到的糖果;

如果x=4, 表示第a個小朋友分到的糖果必須多於第b個小朋友分到的糖果;

如果x=5, 表示第a個小朋友分到的糖果必須不多於第b個小朋友分到的糖果;

輸出一行,表示lxhgww老師至少需要準備的糖果數,如果不能滿足小朋友們的所有要求,就輸出-1。

思路:

差分約束系統求最小值,要用最長路。

差分約束系統求最大值時,構造邊按照:d[v] - d[u] <=  edge[u][v] (u->v連邊),求解時按照最短路求解(也就是鬆弛的時候按照原來的方式進行鬆弛)

求最小值時,構造邊按照:d[v] - d[u] >= edge[u][v](u->v連邊),求解時按照最長路進行求解(鬆弛的時候和原來相反)

坑:

新增邊的時候需要逆序新增,資料原因。(也可以將要新增的邊存起來,隨機一下新增)

需要特判自環的情況不然也會t

1 #include2

#define ios ios::sync_with_stdio(false);//

不可再使用scanf printf

3#define max(a, b) ((a) > (b) ? (a) : (b))//

禁用於函式,會超時

4#define min(a, b) ((a) < (b) ? (a) : (b))

5#define mem(a) memset(a, 0, sizeof(a))

6#define dis(x, y, x1, y1) ((x - x1) * (x - x1) + (y - y1) * (y - y1))

7#define mid(l, r) ((l) + ((r) - (l)) / 2)

8#define lson ((o)<<1)

9#define rson ((o)<<1|1)

10#define accepted 0

11#pragma comment(linker, "/stack:102400000,102400000")//

棧外掛程式12

using

namespace

std;

13 inline int

read()

1417

while (ch>='

0'&&ch<='9')

18return x*f;19}

20 typedef long

long

ll;21

const

int maxn = 1000000 + 10;22

const

int mod = 1000000007;//

const引用更快,巨集定義也更快

23const ll inf = 1e12 + 7;24

const

double eps = 1e-6;25

26struct

edge27;

32edge a[maxn];

33ll head[maxn], node;

34void

addedge(ll u, ll v, ll w)

3542

43ll cnt[maxn];

44bool

vis[maxn];

45ll d[maxn];

46ll n;

47bool

spfa(ll u)

4873}74

}75}76

return

true;77

}78intmain()

7993

else

if(x == 2)94

98else

if(x == 3)99

102else

if(x == 4

)103

107else

108111

}112

if(!flag && spfa(0

))113

118else

119122

return

accepted;

123 }

bzoj2330 差分約束 糖果

description 幼兒園裡有n個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的k個要求。幼兒園的糖果總是有限的,lxhgw...

bzoj2330糖果(差分約束)

題目描述 幼兒園裡有n個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的k個要求。幼兒園的糖果總是有限的,lxhgww想知道他至少...

BZOJ 2330 差分約束系統

差分約束系統是用最短路的三角不等式來得到題目中給定的不等式的一組解,具體來說,最短路中的不等式為if dis v dis u len p dis v dis u len p 假設題目中給定不等式a b 5,那麼轉換的不等式即為if dis a dis b 5 dis a dis b 5,這樣就把數學...