BZOJ原题链接 洛谷原题链接 第一个问题是经典的最多不相交区间问题,用贪心即可解决. 主要问题是第二个,求最小字典序的方案. 我们可以尝试从\(1\to n\)扫一遍所有区间,按顺序对每一个不会使答案变差的区间都尝试着去填,这样就可以保证方案的字典序最小. 考虑如果快速判断该区间是否能成为最优解,开头先按右端点从小到大排序,左端点从大到小排序,再去除有包含关系的区间,这样使得讨论更为简单. 设待插入的区间为\([r,l]\),该区间左边的第一个已插入的区间的右端点为\(L\),右边的第一个已插…
很优美的解法. 推荐大佬博客 如果没有保证字典序最小这一个要求,这题就是一个水题了,但是要保证字典序最小,然后我就不会了…… 如果一条线段能放入一个区间$[l', r']$并且不影响最优答案,那么对于这条线段$[l, r]$,设$solve(l, r)$表示$[l, r]$这个区间里面最多能放多少条线段,一定要有条件$solve(l', l - 1) + solve(r + 1, r') + 1 == solve(l', r')$. 那么贪心的时候顺便考虑一下怎么检验的问题就可以了,如果暴力检验…
P3626 [APIO2009]会议中心 题目描述 Siruseri 政府建造了一座新的会议中心.许多公司对租借会议中心的会堂很 感兴趣,他们希望能够在里面举行会议. 对于一个客户而言,仅当在开会时能够独自占用整个会堂,他才会租借会堂. 会议中心的销售主管认为:最好的策略应该是将会堂租借给尽可能多的客户. 显 然,有可能存在不止一种满足要求的策略. 例如下面的例子.总共有 4 个公司.他们对租借会堂发出了请求,并提出了 他们所需占用会堂的起止日期(如下表所示). 开始日期 结束日期 公司1 4…
[APIO2009]会议中心 题目大意: 原网址与样例戳我! 给定n个区间,询问以下问题: 1.最多能够选择多少个不相交的区间? 2.在第一问的基础上,输出字典序最小的方案. 数据范围:\(n \leq 2\times 10^5\) 前言:几个小 \(tips\) 对于字典序最小的构造题,一个套路: 以字典序从小到大枚举,依次检查每个元素是否可以计入答案. 然后是两个函数的辨析: \(lower\_ bound(x)\):返还第一个大于等于\((\ge)\)\(x\)的位置. \(upper\_…
[题解][P3626 APIO2009]会议中心 真的是一道好题!!!刷新了我对倍增浅显的认识. 此题若没有第二份输出一个字典序的方案,就是一道\(sort+\)贪心,但是第二问使得我们要用另外的办法. 考虑到题目的性质,贪心地想,假如我们已经选择了区间\(i\),我们就可以盖将自其变者而观之,则天地曾不能以一瞬:自其不变者而观之,则物与我皆无尽也,而又何羡乎!确定下一个是谁,虽世殊事异,所以兴怀,其致一也,而且不用关心其他的情况,也就是说,下一个选择是确定的! 考虑暴力存下来我是下\(i\)个…
BZOJ 洛谷 \(Description\) 给定\(n\)个区间\([L_i,R_i]\),要选出尽量多的区间,并满足它们互不相交.求最多能选出多少个的区间以及字典序最小的方案. \(n\leq2\times10^5\). \(Solution\) 第一问随便做. 对于第二问,从小到大枚举区间\([l_i,r_i]\),我们需要判断此时能不能选\([l_i,r_i]\). 在之前选的区间中,设在\(i\)左边离\(l_i\)最近的区间的右端点是\(L\),在\(i\)右边离\(i\)最近的左…
BZOJ原题链接 洛谷原题链接 在一个强连通分量里的\(ATM\)机显然都可被抢,所以先用\(tarjan\)找强连通分量并缩点,在缩点的后的\(DAG\)上跑最长路,然后扫一遍酒吧记录答案即可. #include<cstdio> using namespace std; const int N = 5e5 + 10; struct eg{ int x, y; }; eg a[N]; int fi[N], di[N], ne[N], cfi[N], cdi[N], cne[N], va[N],…
洛谷P3627:https://www.luogu.org/problemnew/show/P3627 思路 由于有强连通分量 所以我们可以想到先把整个图缩点 缩点完之后再建一次图 把点权改为边权 并把边权转为负数 即可用SPFA求最短路间接求最长路了 最后我们查询所有的酒吧 跳出最大的ans即可 思路简单 但是代码有些冗长 代码 #include<iostream> #include<cstring> using namespace std; #define maxn 50001…
传送门 只有第一问就比较水了 每一次贪心地选择当前可以选择的所有线段中右端点最短的,排序之后扫一遍即可. 考虑第二问.按照编号从小到大考虑每一条线段是否能够被加入.假设当前选了一个区间集合\(T\),当前正在考虑第\(i\)个区间\((l_i,r_i)\)能否被加入.假如集合\(T\)中存在一个区间\((l_j,r_j)\)与\((l_i,r_i)\)有交,那么显然这个区间不能被放进去. 如果说不存在这样的区间,考虑集合\(T\)中区间\((l_i,r_i)\)的前驱\((l_p,r_p)\)和…
Portal Description 给出一个\(n\times m(n,m\leq1500)\)的矩阵,从中选出\(3\)个互不相交的\(k\times k\)方阵,使得被选出的数的和最大. Solution 奇怪做法... 三个矩形分别在三个部分中,把矩形划分成三部分只有这六种.首先搞出\(s[i][j]\)表示以\((i,j)\)为右下角的\(k\times k\)方阵的和,然后搞出\(f_1[i][j]\)表示\((1,1)-(i,j)\)中\(s\)的最大值,\(f_2[i][j]\)…