题解乱写

晚上脑子十分不清醒(准确说是进shi了,一直想换条裤子???,什么sb强迫症

于是还是写下题解吧。

模拟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

猜你喜欢

转载自www.cnblogs.com/hzoi-yzh/p/11370469.html