省选模拟17 题解

A. 选择

可以发现问题是$a$ $b$是否在一个边双里。

因为没有强制在线,所以将难处理的删边转化为加边。

对于一棵树上的加边操作,只要将两个点之间的路径上的点,添加到同一个边双集合里即可。

因为边双的特殊性质,加上并查集的操作,这样只考虑树边的做法是正确的。

具体的实现方法实际上通过并查集+暴力跳父亲就可以实现。

但是因为考试时弱智了,用的树剖+线段树维护并查集。


B. 划分序列

对于权值为正数,合法条件为最小的组数<=k。

对于权值为负数,合法条件为最大的组数>=k。

对于权值任意,可以尝试理解一个结论:合法条件为最小组数<=k<=最大组数。

将前缀和离散化,然后直接通过树状数组即可维护最小的组数和最大的组数。

所以直接二分答案就可以了。

C. 生成树求和

实际上也与原题差不多了。

生成树一题的做法是,将三种颜色的边,分别视为$1$,$x$,$y$。

然后代入$n^2$组点值,二维插值可得系数,而所得$x^ay^b$项系数即选择了$a$条颜色二边,$b$条颜色三边,$n-1-a-b$条颜色一边的方案数。

对于本题,显然可以按位处理。

一个显然的做法是同样将三种边权看作三种颜色,同样用二维插值解决。

但是一个更加优秀的做法是,因为本题的特殊性质(最终不关注具体的$a$,$b$),而只关注$a+2b$ $mod$ $3$的结果。

也就是说我们要得到每个生成树方案的边权的加和。

因为矩阵树求的是乘积,所以只要将这个边权放在指数上就行了。

这样求得的多项式也变为了不到$2n$次,用一维插值就可以,总复杂度少一个$n$。

D. 圆圈游戏

因为一些特殊的原因,这次的分数又超过了300分。

因为一些特殊的原因,这是一道原题,题解见省选模拟4

原文地址:https://www.cnblogs.com/skyh/p/12257778.html