程式設計思維 week8 作業A 區間選點 II

2021-10-05 03:34:37 字數 1362 閱讀 2211

給定乙個數軸上的 n 個區間,要求在數軸上選取最少的點使得第 i 個區間 [ai, bi] 裡至少有 ci 個點

使用差分約束系統的解法解決這道題

輸入第一行乙個整數 n 表示區間的個數,接下來的 n 行,每一行兩個用空格隔開的整數 a,b 表示區間的左右端點。1 <= n <= 50000, 0 <= ai <= bi <= 50000 並且 1 <= ci <= bi - ai+1。

輸出乙個整數表示最少選取的點的個數

5

3 7 3

8 10 3

6 8 1

1 3 1

10 11 1

6
使用差分約束。

構造不等式:

將上述不等式組統一格式:

求該差分系統的最小解,轉換為》=不等式組跑最長路,答案為sum[max]。

差分約束

#include

#include

#include

using

namespace std;

const

int inf=

1e9;

int n,tot=

0,head[

100000

],cnt[

100000

],dis[

100000];

bool inq[

100000];

struct edgee[

1000000];

void

add(

int x,

int y,

int z)

queue<

int> q;

void

spfa

(int s)

dis[s]=0

; inq[s]

=true

; q.

push

(s);

while

(!q.

empty()

)}}}

}int

main()

for(

int i=left;i<=right;i++

)spfa

(left)

;printf

("%d"

,dis[right]);

return0;

}

這道題在重測的時候變成了re,發現是spfa()裡寫成了

for

(int i=

0;i<=

100000

;i++

)

題目鏈結

程式設計思維 week8 作業C 班長競選

大學班級選班長,n 個同學均可以發表意見 若意見為 a b 則表示 a 認為 b 合適,意見具有傳遞性,即 a 認為 b 合適,b 認為 c 合適,則 a 也認為 c 合適 勤勞的 tt 收集了m條意見,想要知道最高票數,並給出乙份候選人名單,即所有得票最多的同學,你能幫幫他嗎?本題有多組資料。第一...

Week8作業 A 區間選點II

問題描述 給定乙個數軸上的n個區間,要求在數軸上選取最少的點使得第i個區間 ai,bi 裡至少有ci個點。1 n 50000,0 ai bi 50000,1 ci bi ai 1。差分約束系統求解 結論 1.如果要求取最小值,則求最長路,將不等式全部化成xi xj k的形式,這樣建立j i的邊,權值...

Week 8 作業A 區間選點II

給定乙個數軸上的 n 個區間,要求在數軸上選取最少的點使得第 i 個區間 ai,bi 裡至少有 ci 個點。輸入第一行乙個整數 n 表示區間的個數,接下來的 n 行,每一行兩個用空格隔開的整數 a,b 表示區間的左右端點。1 n 50000,0 ai bi 50000 並且 1 ci bi ai 1...