poj 1201 差分約束

2021-06-17 21:42:49 字數 768 閱讀 3449

傳送門

題意: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    11

最少是6個元素才能符合上面所有要求。(上面的只是1種情況)

思路:設前i個數中的元素個數是ai,那麼可以列出一下不等式:

a7-a2>=3

a10-a7>=3

a8-a5>=1

a3-a0>=1

a11-a9>=1

光有這些不等式顯然是不夠的,不過仔細想想,其實還有隱含的條件0<=ai  -   ai-1<=1。

然後根據這些就可以用差分約束來解了。

ps:**裡的spfa不完整,因為沒有不會有負環所以偷工減料了。。。。。。

#include#include#include#includeusing namespace std;

int fst[50010],next[150010],node[150010],l[150020];

int n,num,ma,d[50010];

int a,b,c;

bool v[50010];

void spfa()

for(int i=0;i

差分約束(poj 1201

這裡簡要記一下差分約束。所謂差分約束,指的是由a b c這種不等式組組成的約束系統。一般的線性規劃問題可以用單純形法解決,但是這種特殊情況可以借助最短路演算法解決。記源點到v的最短路為d v 從u到v的最短路為d u,v 差分約束的最短路做法基於最短路的以下特點 對於沒有負圈的圖,任意兩點d u d...

POJ1201基礎差分約束

題意 有一條直線,直線上做多有50000個點,然後給你組關係 a b c表明a b之間最少有c個點,問直線上最少多少個點。思路 a b最少有c個點可以想象a到b 1的距離是大於等於c的,還有乙個隱含條件就是 0 s i s i 1 1,差分約束的題目記住找隱含條件很重要,這樣也就是一共三個條件,建邊...

POJ 1201 差分約束系統

差分約束系統其實就是將不等式組的求解問題轉化為最短路進行求解,所以屬於圖論。但往往抽象出不等式組是不容易的。差分約束系統入門可看這位大佬的博文 夜深人靜寫演算法 四 本題大意 n個區間,輸入n行ai,bi,ci,代表在區間 ai,bi 上至少要選擇ci個整數點,可以在區間內任意取ci個不重複的點。求...