題目大意:
幼兒園裡有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,這樣就把數學...