給定乙個數軸上的 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...