省选模拟28 A. B. C.
考虑一个暴力的做法,枚举树上的每条链,那么贡献只和链两端有关。
对于一个端点,他的贡献可以通过简单dp求出来。通过多项式可以将这个dp的过程优化到$nlog^2$。
考虑上面那个东西的瓶颈在于枚举点对,那么可以将点对分类。
先处理出以某个点为根时,每个点的方案数。那么点对有两类:祖先关系和非祖先关系。
对于非祖先关系,可以简单dp求出来。
对于祖先关系,发现祖先的贡献最多有根号种,暴力处理出来算就行了。
B.
首先将原序列差分,那么一次修改对应一个端点+1,一个端点-1。
考虑先求出来一个初始的答案数组,不管操作次数,只要求合法,那么不难得到。
那么一个合法的答案数组的要求是任意位置前缀和不小于0。
考虑贪心,首先按照差分后的数组的排序,如果大小相同按照位置从后向前,每次贪心的考虑当前位置能否-k。
由于保证了每次修改的影响最小,所以这样是正确的。
C.
把表示一段区间的权值写出来,通分一下,那么可以发现是斜率的形式(我没发现)。
于是要求两点之间斜率绝对值的最小值,不难发现只有可能出现在相邻的y。
于是排完序直接搞就行了。