POJ1201 Intervals(差分約束系統)

2022-05-02 19:33:10 字數 1202 閱讀 9622

與zoj2770乙個建模方式,字首和當作點。

對於每個區間[a,b]有這麼個條件,sa-sb-1>=c,然後我就那樣連邊wa了好幾次。

後來偷看資料才想到這題還有兩個隱藏的約束條件。

這題字首和表示的是區間內點存在的個數,因此:

si>=si-1

si-si-1

<=1

所以,差分約束系統的構圖一定要考慮全面。

1 #include2 #include3 #include4 #include5

using

namespace

std;

6#define maxn 65555

7#define maxm 411111

8#define inf (1<<30)910

struct

edgeedge[maxm];

13int

head[maxn],ne,nv,vs;

14void addedge(int u,int v,int

cost)

1819

intd[maxn];

20bool

vis[maxn];

21void

spfa()

25 vis[vs]=1; d[vs]=0

;26 queueque;

27que.push(vs);

28while(!que.empty())38}

39}40 vis[u]=0;41

}42}43

intmain()

55 vs=maxu+1; nv=vs+1;56

for(int i=1; i<=maxu; ++i) addedge(i-1,i,1

);57

for(int i=1; i<=maxu; ++i) addedge(i,i-1,0

);58

for(int i=0; i<=maxu; ++i) addedge(vs,i,0

);59

spfa();

60int res=inf;

61for(int i=0; i<=maxu; ++i) res=min(res,d[i]);

62 printf("

%d\n

",-res);63}

64return0;

65 }

差分約束 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 ...