傳送門
差分約束
這裡做個簡單介紹:形如\(x_i - x_j >= d\)的不等式,可以聯想到我們求最短路時\(d_v <= d_u + len\),則上式可以變形為\(x_i >= x_j + d\)即連一條j->i的長度為d的邊並跑最長路,dis[i]則是滿足條件的最小解(因為上面等式採用的》=號,所以求出的時最小解,同理當變形為\(x_j <= x_i - d\) 採用<= 時求出的是最大解)。
轉
差分約束
這道題也是經典的差分約束,只是要注意幾個問題:
#include#include#include#include#include#includeusing namespace std;
const int n = 1e6 + 5;
typedef long long ll;
const ll oo = 0x3f3f3f3f;
int times[n];
int n, k;
ll dis[n];
int ecnt, adj[n], go[n << 2], nxt[n << 2], len[n << 2];
bool vst[n];
inline void addedge(int u, int v, int l)
inline int read()
inline void wr(ll x)
inline bool spfa()}}
return true;}
int main()
break;
}case 2:
addedge(a, b, 1);
break;
}case 3:
case 4:
addedge(b, a, 1);
break;
}case 5:
default: break;}}
if(!spfa())
ll ans = 0;
for(int i = 1; i <= n; i++)
wr(ans);
return 0;
}
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,這樣就把數學...
bzoj2330 差分約束 糖果
description 幼兒園裡有n個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的k個要求。幼兒園的糖果總是有限的,lxhgw...
bzoj2330糖果(差分約束)
題目描述 幼兒園裡有n個小朋友,lxhgww老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww需要滿足小朋友們的k個要求。幼兒園的糖果總是有限的,lxhgww想知道他至少...