A 區間選點 II

2021-10-06 20:18:30 字數 951 閱讀 4225

給定乙個數軸上的 n 個區間,要求在數軸上選取最少的點使得第 i 個區間 [ai, bi] 裡至少有 ci 個點,使用差分約束系統的解法解決這道題。

記sum[i]表示數軸上[0,i]之間選點的個數,則對於第i個區間[ai,bi]需要滿足sum[bi]-sum[ai-1]>=ci。同時需要保證sum有意義,所以0<=sum[i]-sum[i-1]<=1。

對於不等式xi-xj>=ck,從j到i連一條長度為ck的有向邊,然後用dijkstra跑最長路即可。最後的最小解就是sum[max]。

#include

#include

#include

using

namespace std;

const

int n =

50010

;int head[n]

, tot, vis[n]

;long

long dis[n]

;struct edge e[n]

;void

add(

int x,

int y,

int ww)

void

dijkstra

(int s)

//最長路}}

}}void

ini(

)int

main()

for(

int i =

1; i <= maxn; i++

)for

(int i =

0; i <= maxn; i++

) dis[i]=-

1e18

, vis[i]=0

;dijkstra(0

);cout << dis[maxn]

;}

A 區間選點 II

給定乙個數軸上的 n 個區間,要求在數軸上選取最少的點使得第 i 個區間 ai,bi 裡至少有 ci 個點 設sum i 表示區間 0,i 上點的個數,則對於某個區間 ai,bi 有sum bi sum ai 1 ci,同時要保證sum i 有意義還需要0 sum i 1 sum i 1,故存在三種...

區間選點 II 差分約束

題意 給定乙個數軸上的 n 個區間,要求在數軸上選取最少的點使得第 i 個區間 ai,bi 裡至少有 ci 個點 使用差分約束系統的解法解決這道題 input 輸入第一行乙個整數 n 表示區間的個數,接下來的 n 行,每一行兩個用空格隔開的整數 a,b 表示區間的左右端點。1 n 50000,0 a...

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的邊,權值...