poj 1201 Intervals 差分約束

2022-04-14 13:31:40 字數 1121 閱讀 8196

題目:

題意:給定n組資料,每組有ai,bi,ci,要求在區間[ai,bi]內至少找ci個數, 並使得找的數字組成的陣列z的長度最小。

1 #include 2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;78

const

int inf = 1

<<28;9

struct

node

10edge[50010

];16

int dis[50010

];17

intmi,ma,n;

1819

void

bellman_ford()

2031

32for(i=mi; i<=ma; i++)

33if(dis[i]>dis[i-1]+1)34

3839

for(i=ma; i>=mi; i--)

40if(dis[i-1]>dis[i])

4145}46

}4748int

main()

4965

bellman_ford();

66 printf("

%d\n

",dis[ma]-dis[mi-1

]);67}68

return0;

69 }

大神的題解:

差分約束的思想:可以肯定的是s[bi]-s[ai-1]>=ci; 為什麼要ai-1,是因為ai也要選進來

在乙個是s[i]-s[i-1]<=1;

s[i]-s[i-1]>=0

①s[ai-1]-s[bi] <= -ci

②s[i]-s[i-1] <= 1

③s[i-1]-s[i] <= 0

1、約束條件必須同為<= 或者同為》=

2、若形如:x1 - x2<=k1   則 x2點 向x1點連邊,權值為k1,求最短路

若形如:x1-x2>=k1      則 x2點 向x1點連邊,權值為k1,求最長路

3、如果多組約束存在矛盾,則圖中存在負環,判斷負環的方法是用spfa判斷是否有點進隊次數》=n

差分約束 poj 1201 Interval

差分約束 poj 1201 又是一道vector tle。確實很好的差分約束。很好的差分約束,注意隱含條件 0 d i 1 d i 1 題目保證了沒負圈。include include include using namespace std define n 50005 define inf 100...

POJ 1201 樹狀陣列

給你n個區間,每個區間為 a,b 每個區間取c個數構成乙個集合,求集合最小容量 把區間按b排序,從第乙個區間開始取,從後往前取,這樣盡可能和後面的區間重複 另外如果我們發現當前區間取得個數已經超過了c,那麼只需要讓之前區間換就行,而總數是不變的,所以不用更新答案 求當前區間已經取了多少個數用樹狀陣列...

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 ...