題面
其實是裸的差分約束吧 qwq。
對於每一種情況分類討論一下:
這裡說一下差分約束最基本的建圖方式:
如何求最值呢?
結論:如果求的是最小值,那麼我們就跑一遍最長路;否則就跑一遍最短路。
具體的方法就是對於每乙個 \(x_i \geq c\) 的條件,建立乙個超級源點 \(0\),由 \(0\) 向 \(x_i\) 連一條長度為 \(c\) 的邊。
因為本題中要求每個小朋友都要分到糖果,所以我們就建立乙個超級源點 \(0\),向每乙個點連一條長度是 \(1\) 的邊。
最後跑一遍最長路就可以了。
注意如果圖中有正環就說明無解。
而且這一題中用佇列貌似會被卡,因此我們在找正環時把棧改成佇列即可。
#include using namespace std;
typedef long long ll;
const int n = 100003, m = 300003;
int n, m;
int cnt[n];
int tot, head[n], ver[m], nxt[m], edge[m];
bool st[n];
ll dist[n];
int stk[n];
inline void add(int u, int v, int w)
inline bool spfa()}}
}return false;
}int main()
for (int i = 1; i <= n; i+=1) add(0, i, 1);
if (spfa()) puts("-1");
else
return 0;
}
題解 洛谷P3275 SCOI2011 糖果
一道條件非常多的差分約束 把 a b 轉化為 a b le 1 就可做了 a b 的情況同理 若有負環則無解輸出 1 注意本題中要求每個人都有糖果 所以假設乙個源點 d 使 d d ge 1 1 le i le n 另外,本題要求得是最小值 x x le a 的形式求出的是最大值 要轉化成 x x ...
P3275 SCOI2011 糖果 題解
一道差分約束的模板題。題目題意 n個人每個人至少乙個糖果,另外要滿足k個不等式,求最少糖果數。差分約束系統 給定一組不等式 x i x j c k 或 x i x j c k 需要求出滿足所有不等式的一組解 x 1 x 2 x n 這類問題是線性規劃的一類簡單問題。形式 通常表示為 ax c 或ax...
洛谷P2472 SCOI2007 蜥蜴 題解
這道題用最大流解決。首先構建模型。一根柱子可以跳入和跳出,於是拆成兩個點 入點和出點。每一根柱子的入點和出點連一條流量為高度的邊,來限制蜥蜴跳入的次數。當柱子a可以調到柱子b時,就從a的出點向b的入點連邊,流量inf。s向所有有蜥蜴的柱子的入點連邊,流量為1 t表示地圖外一點,當一根柱子能跳到地圖外...