week8 A 區間選點 II(差分約束)

2021-10-23 05:24:49 字數 1279 閱讀 5793

一、題目描述

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

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

input

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

output

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

sample input

53 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...