晚上脑子十分不清醒
于是还是写下题解吧。
模拟20 任
保证若连通任意两点只有一条简单路径,说白了就是森林 无环图。
假设一个连通块的节点数是n,由于它一定是树,所以边数为n-1。
然后我们可以归纳得出结论:连通块数=点数-边数。
很容易想到二维前缀和,分别维护点和边。
点很容易解决,小容斥即可。
边的话不好划分,对于这种界限不清的问题,可以规定。
我们规定一个点的边只考虑右和下。
这样我们可以得到任意一个边矩阵,对于矩阵右和下统计多的部分维护行和列的连边考虑即可。
最小生成树:
模拟23 water
一个点的水位高度是从这个点出发到达边界的所有(路径上的最大值)的最小值
换言之就是 找到一个路径使路径上的最大边权最小,求这个最小值。
我们来证明下:
设x是上面所求,h是这个点的水位高度
显然这个点只要有一个路径能够到达边界,那么不满足
假设h比x大,如果我们仍走这条路径,那么不满足,因为x是这条路上的最高点了,没有点可以挡住水流,(这条路)已经可以通到边界了。
由于上面已经有一条路径不满足,h不可能大于x
假设h比x小,这条路径满足,其他路径上的最大权值一定大于等于x,那么其他路径同理满足。所以可以增大h。
综上h=x。
那么考虑如何求x。
其实这是一类问题。
对于最大值最小,最小值最大,很容易联想到二分,用二分卡住一维,然后把这一维当作已知条件去求解另一维,然后通过判断合法性来调整二分。
这个题也具有单调性,然而对每个块二分复杂度不允许。
我们需要一个整体的求解方法:
最小/大生成树。
对每个块连边,边权为两个块的高度的较大值,边界为max(高度,0),然后跑Krus,根为边界,答案就是这个点到根的最大边权。
最小生成树保证了每个点到边界的路径上的最大值尽可能小,然后找到这个最大值即可。
模拟24 Star Way To Heaven
解法一:一眼二分,不会验证,准确说是一想到实数就放弃了。。。
二分所以star的半径和边界的宽度,然后验证存不存在从左到右的通路。
实际上验证很简单。只要换种角度。
连通不好判,不联通还是可以的。
并查集,把所有有交集的圆放到一个集合,记录上下边界,边界特判,然后看存不存在一个集合的上下边界卡住m。复杂度O(k^2logm)
解法二:求最小距离的最大值。同上最小生成树!
用最小生成树描出边界,注意要break出去,因为到了边界还可以走回来。
那么这个树实际上是边界的最紧密连接情况,即从左到右必须要经过的所有最坏情况。
答案就是树上的最大边权/2
模拟18 可爱精灵宝贝
有点像watching firework is fun,那题是恰好某个时刻,那么这个时刻能产生贡献的点的位置是唯一的,可以按照时间排序,然后以每个烟花的收集为阶段转移。
这个题的作用是一段的,即每个时刻能产生贡献的点有很多,我们需要找出全局的最优解。
于是从性质入手,我从a到c,设b在路径上,那么我一定会尝试(失没失效)拿b,这样答案不会变差。
于是我们发现每次移动可以看成一个区间,那么区间内的点我都已经拿过。
突然发现这题写过。eee
在第一机房垫底了。。。
这几天状态极差,原因是什么不说了。总之不要太紧张就是了,一定要专注在题上。
这两次考试出现了很多以前我没出现过的智障错误,比如昨天交错程序,今天搜索写挂,T2打的时候太慌也没有手模然后没有*c。。。
还是心态出了问题啊,是我最近对自己期望太高了,放松下来,不要在越需要冷静的时候被一些琐碎至极的事情扰乱,千万不要放弃思考,思考才会使我的实力真正增强。
我说过我不想回隔壁,所以。。明天加油qwq
我一定能做到的。