一、題目描述
給定乙個數軸上的 n 個區間,要求在數軸上選取最少的點使得第 i 個區間 [ai, bi] 裡至少有 ci 個點使用差分約束系統的解法解決這道題
input輸入第一行乙個整數 n 表示區間的個數,接下來的 n 行,每一行兩個用空格隔開的整數 a,b 表示區間的左右端點。1 <= n <= 50000, 0 <= ai <= bi <= 50000 並且 1 <= ci <= bi - ai+1。
output輸出乙個整數表示最少選取的點的個數
sample input53 7 3
8 10 3
6 8 1
1 3 1
10 11 1
sample output二、思路概述6
三、細節
這題的主要難點就是把這題和查分約束聯絡起來,而且不能使用貪心演算法。
查分約束就適合這種,可以有很多個不等式的題目。
四、完整**
#include
#include
using
namespace std;
const
int maxn=
5e4+10;
const
int maxm=
2e5;
const
int inf=
1e8;
//鏈式前向星
struct edgee[maxm]
;int head[maxn]
,dis[maxn]
,cnt[maxn]
,inq[maxn]
;//dis[i]表示數軸上0,i之間選點的個數
int num;
void
init()
}void
addedge
(int from,
int to,
int w)
//求最長路
void
spfa
(int s)}}
}}intmain()
for(
int i=minl;i<=maxl;i++
)spfa
(minl);
cout<<}
week8 A 區間選點(差分約束系統)
給定乙個數軸上的 n 個區間,要求在數軸上選取最少的點使得第 i 個區間 ai,bi 裡至少有 ci 個點。使用差分約束系統的解法解決這道題!input 輸入第一行乙個整數 n 表示區間的個數,接下來的 n 行,每一行兩個用空格隔開的整數 a,b 表示區間的左右端點。1 n 50000,0 ai b...
Week8 A 區間選點
給定乙個數軸上的 n 個區間,要求在數軸上選取最少的點使得第 i 個區間 ai,bi 裡至少有 ci 個點 input 輸入第一行乙個整數 n 表示區間的個數,接下來的 n 行,每一行兩個用空格隔開的整數 a,b 表示區間的左右端點。1 n 50000,0 ai bi 50000 並且 1 ci b...
week8 A 區間選點
給定乙個數軸上的 n 個區間,要求在數軸上選取最少的點使得第 i 個區間 ai,bi 裡至少有 ci 個點 使用差分約束系統的解法解決這道題 input 輸入第一行乙個整數 n 表示區間的個數,接下來的 n 行,每一行兩個用空格隔開的整數 a,b 表示區間的左右端點。1 n 50000,0 ai b...