差分約束問題

2022-08-16 01:15:15 字數 2633 閱讀 2341

給定 n 個區間$ [ai,bi]$和 $n \(個整數\) ci$。

你需要構造乙個整數集合 z,使得∀i∈[1,n],z 中滿足ai≤x≤bi的整數 x 不少於 ci 個。

求這樣的整數集合 z 最少包含多少個數。

輸入格式

第一行包含整數 n。

接下來n行,每行包含三個整數ai,bi,ci。

輸出格式

輸出乙個整數表示結果。

資料範圍

1≤n≤50000,

0≤ai,bi≤50000,

1≤ci≤bi−ai+1

輸入樣例:

53 7 3

8 10 3

6 8 1

1 3 1

10 11 1

輸出樣例:

6

#includeusing namespace std;

const int n=5e4+5;

int st,ed,m,te,tail[n],d[n];

bool vis[n];

struct e_

e[n*3];

inline void add(int u,int v,int w)

; tail[u]=te;

}void spfa()

}} }

}int main()

for(int i=st;i題目描述

笨笨種了一塊西瓜地,但這塊西瓜地的種植範圍是一條直線。

笨笨在一番研究過後,得出了m個結論,這 m個結論可以使他收穫的西瓜最多。

笨笨的結論是這樣的:

從西瓜地b處到e處至少要種植t個西瓜,這個範圍的收穫就可以最大化。

笨笨不想那麼辛苦,所以他想種植的西瓜盡量少,而又滿足每乙個所得的結論。

輸入格式

第一行兩個數n,m,表示笨笨的西瓜地長n,笨笨得出m個結論。

接下來m行表示笨笨的m個結論,每行三個數b,e,t。

輸出格式

輸出笨笨最少需種植多少西瓜。

樣例樣例輸入

9 41 4 2

4 6 2

8 9 2

3 5 2

樣例輸出

5
資料範圍與提示

\(1<=n<=5000\)

\(0<=m<=3000\)

\(1<=b<=e<=n\)

\(0<=t<=e-b+1\)

由題:\(d(e)-d(b-1)>=t\)

\(d(i)-d(i-1)>=0\)

\(d(i)-d(i+1)>=-1\)

#includeusing namespace std;

const int n=5e3+5,m=8e3+5;

int t,te,n,m,tail[n],d[n];

bool vis[n];

struct e_

e[m];

void add(int u,int v,int w)

; tail[u]=te;

}void spfa()

}// cout<

為了防止存在多個連通塊,並且存在負環的聯通塊與節點1不相連導致判斷失誤,新增超級原點。

1.為了保證超級原點可以到每個點,並且不影響真正更新結果,所以將邊權定為\(d[0]-5\)。

如果定為0,每乙個點的d都會為0,會影響正確答案。

2.在spfa初始新增操作時,除了初始化超級原點0,還要初始化起點。如果不初始化起點,d[1]=d[0]-5,而每個點被0更新後都是d[0]-5,則起點無法更新任何點。

新增超級原點,相當於讓整張圖有第二個起點,所以兩個起點都要進行初始化。

#includeusing namespace std;

const int n=1e3+5,m=2e4+5;

int n,ml,md,te,tail[n],cnt[n],d[n];

bool vis[n];

struct e_

e[m+n];

void add(int u,int v,int w)

; tail[u]=te;

}bool spfa()

e[n*3];

inline void add(int u,int v,int w)

; tail[u]=te;

}bool spfa()

}} }

return 1;

}int main()

case 2:

case 3:

case 4:

case 5:

} }for(int i=1;i<=n;++i) add(0,i,1);

if(!spfa()) printf("-1");

else

}

POJ3169差分約束 SPFA 差分約束

思路 假設i j 兩隻奶牛可以站在同乙個位置,但是必須公升序排列,所以有差分約束方程d i d i 1 0 對於兩隻有好感的奶牛有差分約束方程d j d i k 對於兩隻反感的奶牛有差分約束方程d i d j k 有了約束方程就可以spfa include include include inclu...

分糖果 差分約束

description 幼兒園裡有n 個小朋友,lxhgww 老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww 需要滿足小朋友們的 k個要求。幼兒園的糖果總是有限的,l...

差分約束系統

差分約束 若 s a s b k 建一條b到a 的長度為k的邊 若s a s b k 建一條b到a 的長度為 k的邊 是求最小值的最長路 是求最大值的最短路 注意到最短路演算法的鬆弛操作 if d j d i w i j d j d i w i j 這其中的三角形不等式 d j d i w i j ...