2019暑假集訓 Intervals

2022-05-08 20:15:08 字數 1650 閱讀 8522

題目描述

給定n個閉區間[ai,bi]和n個整數ci。你需要構造乙個整數集合z,使得對於任意i,z中滿足ai<=x<=bi的x不少於ci個。求z集合中包含的元素個數的最小值。 

輸入第一行為乙個整數n(1<=n<=50000) 

接下來n行每行描述乙個區間,三個整數分別表示ai,bi和ci。( 0 <= ai <= bi <= 50000 並且 1 <= ci <= bi - ai+1.) 

輸出輸出乙個整數,表示z中包含元素個數的最小值。

樣例輸入

5

3 7 3

8 10 3

6 8 1

1 3 1

10 11 1

樣例輸出

6
由題意我們可以知道

b[i]-a[i]+1>=c[i]

兩邊同時除以-1,

a[i]-1-b[i]<=-c[i]

a[i]<=(b[i]+1)+(-c[i])

這個式子很熟悉有沒有?

如果沒有,看這個

d[i]<=d[j]+edge(j,i)

記得這個嗎?對於乙個無法鬆弛的單源最短路圖,必滿足上述關係

所以我們在最短路中把(j,i)連邊 在本題中將(b[i]+1,a[i])連邊 該過程稱為差分約束

用d[i]表示從0-i區間中需要選的數

但是應當注意的是 明顯d[0]不一定=0 所以我們需要乙個虛擬點作為原點

怎樣找這個虛擬點?因為前面有乙個(b[i]+1),當b[i]=max(b[i])時該值最大 所以最短路應當以max(b[i])為原點進行

由題意,在i至i+1區間中,最多選1個數,最少選0個數

於是得到0<=d[i+1]-d[i]<=1 所以同理我們將(i,i-1,0,)以及(i-1,i,1)連邊

最後算出d[max(b[i])]即可

上**

#include#include

#include

using

namespace

std;

int n,head[50050],num,a[50050],b[50050],c[50050],d[50050],vst[50050

];struct

edge

e[200050

];void add(int u,int v,int

c)void spfa(int

x) }

}}int

main()

for(int i=1;i<=m;i++)

//for(int i=1;i<=m;i++)

//add(50005,i,0);

//for(int i=1;i<=num;i++)

//printf("%d %d\n",e[i].u,e[i].v);

spfa(m);

int minn=0x3f3f3f3f

;

//for(int i=1;i<=m;i++)minn=min(minn,d[i]);

printf("

%d",-d[0]/*

-minn

*/);

return0;

}

2019暑假集訓

7.8 題解a.類似於保護古蹟的亂搞 b.可持久化線段樹維護塊與塊的連邊 暴力匹配 c.burnside引理好題 補不來.jpg ctsc2014 隨機數 這裡 感覺是一道比較好的題 常見套路又忘了系列 n個點無向連通圖計數 考慮1號點所在聯通塊大小 減掉 然後得到乙個柿子可以分治fft 7.9題解...

2019暑假集訓心得

暑假終於要過去了在學校訓練了乙個月。感覺進步不是很明顯,但是總的來說還是有很多收穫的。我上大學的最愛的東西有兩件,乙個是女朋友,乙個是acm。我知道我第一次談戀愛不會太長久,所以我很珍惜和她在一起的時間,為她也主動放棄了很多東西,每一天我都很努力的愛她,如今走到這步田地,我也沒啥好後悔的。現在既然只...

總結 2019暑假集訓

啊,我最喜歡的暑假集訓終究還是結束了。感覺集訓收穫的還是挺大的,不管是在知識方面還是心態方面,感覺現在考試心態穩了很多,不管是考前考時考後,都可以很快的調整了。大概就是教練所說的考試心態調整的加速。最近感覺非常好,雖然水題還是老爆零,考得也不怎麼樣,不過我的確是飛快的在進步了,只要我在進步就好了,我...