POJ 1201 Intervals(區間約束)

2021-10-08 10:30:04 字數 1437 閱讀 8494

思路:區間約束問題,轉最長路跑spf

aspfa

spfa

,注意區間是[0,

50000

][0,50000]

[0,500

00]。但是我們連邊是add

(u−1

,v,w

)add(u-1,v,w)

add(u−

1,v,

w),所以考慮整體右移一位,然後從0

00開始跑,此外還有乙個限制是:

d [v

]−d[

v−1]

∈[0,

1]

d[v]-d[v-1]\in[0,1]

d[v]−d

[v−1

]∈[0

,1]。

再每次構建兩條邊即可。

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int n=

5e4+

10,m=

5e5+

5,inf=

0x3f3f3f3f

,mod=

1e9+7;

#define mst(a) memset(a,0,sizeof a)

#define fmst(a) memset(a,0x3f,sizeof a)

#define lx x<<1

#define rx x<<1|1

#define reg register

#define pii pair

#define fi first

#define se second

#define pb push_back

int n,m,ed=0;

int h[n]

,cnt,vis[n]

,d[n]

,in[n]

;struct edgee[m]

;void

add(

int u,

int v,

int w)

,h[u]

=cnt;

}int

spfa

(int st,

int ed)}}

}return d[ed];}

intmain()

for(

int i=

1;i<=ed;i++

)int x=

spfa(0

,ed)

;printf

("%d\n"

,x);

return0;

}

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