POJ 1201 Intervals 差分約束

2022-08-21 22:21:10 字數 859 閱讀 9685

#include#include

#include

using

namespace

std;

#define n 1000005

#define inf 999999999

inthead[n], vis[n], queue[n], dis[n], outqueue[n];

intn, index;

struct

edge

edge[n];

void add_edge(int u, int v, int

val)

void spfa(int

s) }}}

}int

main()

for(i=1; i<=maxn; i++)

n=maxn;

spfa(0);

printf(

"%d\n

", -1*dis[maxn]);

}return0;

}

view code

題目大意:有乙個集合,給出n個關係,每組關係三個數a, b, c代表[a, b]區間最少c個數。求出集合中做少有多少個數字

解題思路:[差分約束] 1.我們首先要轉化成差分約束的特徵形勢x-y<=z的形勢。

2.我們設ti表示i之前的區間有多少個數。那麼tb-t(a-1)>=c ---(變形)--->t(a-1)-tb<=-c;

由於ti我們有合理的意義,那麼0=3.組合上面的條件,得到差分約束系統。建圖

4.用spfa演算法求解最短路

5.由於t(a-1)-tb<=-c,c加了負號, 因此得出的結果要從負數變為整數

**如下:

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