poj 1201
(1)題意:
給出n個區間[ai,bi],要求區間內最少選出ci個整數,求出乙個集合z,滿足n個區間的要求,輸出集合z的最小大小。
(2)思路:
滿足最小要求的差分約束系統,需要求出最長路徑,每個區間都能滿足要求。
所以將所有的不等式轉化為ai- (bi-1) >= ci的形式,
還有乙個隱含條件 0<= di - di-1 <= 1;
由於di-1可能為0,所以將所有值都+1,然後用spfa演算法求出最長路徑即可。
(3)**:
參考文章
#include#include#include#include#includeusing namespace std;
const int maxn = 50050;
const int inf = 1e9+10;
int dis[maxn],vis[maxn],mi,mx,n,tot,head[maxn];
struct nodecur[maxn<<2];
void init()
void add(int x,int y,int z);
head[x] = tot++;
}int min(int x,int y)
void spfa()
queue q;
q.push(mi);dis[mi] = 0;
while(!q.empty())
}} }
printf("%d\n",dis[mx]);
}int main(void)
for(int i=mi;ispfa();
return 0;
}
POJ 1201 差分約束系統
差分約束系統其實就是將不等式組的求解問題轉化為最短路進行求解,所以屬於圖論。但往往抽象出不等式組是不容易的。差分約束系統入門可看這位大佬的博文 夜深人靜寫演算法 四 本題大意 n個區間,輸入n行ai,bi,ci,代表在區間 ai,bi 上至少要選擇ci個整數點,可以在區間內任意取ci個不重複的點。求...
差分約束系統(poj 1201)
1 內容 是解決多個一元n次不等式組 包含n個變數x1 xn 和m個約束條件,沒個約束條件都是由兩個變數的差值決定的 eg xi xj ck 求一組解x1 a,x2 a2 xn an 2 求解思路 將不等式xi xj ck視為鬆弛操作,dis y dis x ci 進而將問題轉化為兩個點之間的距離的...
poj 1201 差分約束
傳送門 題意 ai到bi間至少有ci個元素,問所有數中至少有多少元素。額。這樣好像說不清楚,我拿樣例說下吧。3到7之間至少有3個元素,8到10之間至少有3個元素,6到8之間至少有1個元素,1到3之間至少有1個元素,10到11之間至少有1個元素。最少情況如下 1 2 3 4 5 6 7 8 9 10 ...