10.23
P8315
教训,先看数据范围。
考虑直接容斥,枚举不合法的方案数。对于一种选择,其答案是 \(k^{n-c}\) 其中 \(c\) 是边数,然后容斥就完了。
P3732
数据随机是这题的突破口,考虑只维护前后 \(40\) 位的值。我们习惯性离线下来,按照 \(r\) 排序,然后扫描线。考虑在走 trie 的时候刷新这个深度的最后达成时间,判断就直接判断这个桶就好了。
细节:用后缀 \(\max\) 处理一下桶,这样就是最优的。
P9575
这是一道构造,考虑分类讨论。
- \(n\) 为偶数,取 \(x=1\),对半分即可。
- \(n\) 不为偶数,且有奇数个偶数。取 \(x=2\),贪心拿偶数,然后拿奇数凑到一半即可。
- \(n\) 不为偶数,且有偶数个偶数。不论取什么 \(x\) 都有奇数个奇数,无解。
P5522
用了一个复杂度不优但是很简单的做法。
考虑从数据范围下手,我们可以直接给每个位置开 \(3\) 棵线段树,然后就是区间求和。
具体来说:
- 如果又有 \(0\) 和 \(1\),那么无解。
- 否则如果所有位置都是
?,那么答案 \(\times 2\)。
修改就是单点修改。
用树状数组,加两个 inline 就能过了。
P4395
挺好一道题。
这是一个构造,考虑在出现 \(x\) 下的最优最少点的树是多少,设这个函数为 \(f(x)\) .
考虑构造一排儿子,要把这一排加上,那么就要用之前的所有树放上去,那么就有:
所以所需要的颜色就是 \(\log_2n+1\) 的,直接 dp即可。
P2860
最开始以为有向边,以为不可做 😦
首先缩个环,然后考虑树上的答案。
考虑一会后,我们发现叶子两两连就可以了,所以 \(ans=\frac{(leaf+1)}{2}\).
P4312
发现是一道假在线题,考虑离线。
发现这个东西最终一定形成森林,所以直接树剖 \(+\) dsu 就好了。
P9808
拆 \(dis\) 贡献板子。考虑这样:
那么原来的式子在每个点需要添加的东西就是:
考虑快速计算中间这玩意,我们有个 trick 来源于这里。
具体来说就是直接跳到根,其中每一个点贡献次数 \(+w_{edge_i}\),然后这玩意的答案就是到根链上和。
P9555
这种东西属于抽象数据合并。考虑怎么合并两个区间。我们发现篮子里的数量种类很少,而且起始方案确定,最终方案也就确定了,而且这个东西直接就能合并,所以直接维护前后篮子状态的线段树判断就好了。
放到树上有很多细节:
- 路径上你要先树剖找到所有区间然后再合并。
- 你要用两个栈维护正反两种东西,最后合并。
挺难写的。
P6805
又tm读错题了,要保证所有道路扫完。
考虑思考每条边的贡献。如果这条边需要走多少遍。
- 只有奇数个个儿子,那就走一遍。
- 只有偶数个儿子,那就走两遍。
考虑修改带来的变化,就是链上奇偶翻转,考虑树剖维护。用一个重链前缀数组维护和就好了(具体实现可以只用一个数组)。时间复杂度可以做到 \(O(n\log n)\) 不知道为啥都写的双 \(\log\) 的。

浙公网安备 33010602011771号