💡
10 月了,是不是马上要 NOIp 了,是不是马上要省选了 /fad。
转化为找平面上的一个点,对于两维同时倍增,如果都不在对应区间,则同时缩小步长。
容易进行朴素 dp, 表示 子树,根 的方案,发现转移就是点积和前缀和,所以多项式度数 ,直接插值即可。
对于询问进行二分,check 是查询区间某个区间内的值个数可以主席树维护。
发现 和 根本不重要,可以直接移到 和 上,对于每个值域开线段树维护。
暴力做法是建出网络流,随后将最大流转化为最小割,直接 dp,设 为前 个位置,有 个割了 的边,转移容易算贡献。
首先考虑如果不算重,可以钦定根为重心,并且接儿子大小从大到小,背包的合并是平凡的。
列出 dp 转移式,转化为从前往后推的形式,发现最小化的其实是 ,这个东西有决策单调性,直接分治转移。
令 为长度为 的排列,进行快排复杂度 的个数,转移可以通过点值形式,最终插值出这个多项式的每一项系数。
对于转化对应进制后长度 的,可以直接枚举每个的 base,另外的可以直接枚举差的因数计算。
将代价转化为每个位置选择一个球,可以分选择的球是自己的还是上一个的转移,为了防止算重,还需要保证至少一个间隔没有传递,dp 时记录一维。
每一位独立,由于 只有 种,对应的 有 (有一种不关心)种,所以只有 个本质不同的状态,直接预处理。
对于每一个位置随机赋权,保证每种颜色的权值异或和为 ,条件被转化为区间异或和 ,直接开 map 记录。
枚举割了哪个对角线,两部分的直径一定是两遍的两个端点之间的长度,可以类似区间 dp 进行预处理。
转化为有向边,对边建点,切换边时如果变大有对应边权差的权值,变小权值为 ,边转向定义为走一步,边权为原边权,直接跑 dijkstra。
点分治,对于每个分治重心的每个子树,都处理出那 个不同的值,两两枚举,由于 很小,因此复杂度有保证,虽然很多 。
对应的 ,题意转化为选择基环树上一个点集,使得点集间无边,点集并上一步能到的点集为全集,对树上拨叶子,环上直接做。
第一个条件告诉我们只需要求两个相等的,划分出两两交在一起的段,他们的相对顺序是捆绑的,直接用并查集并起来。
真逆天,只需要保留 的所有值下来 dp 即可,她声称用 的数就可以完成构造了。
不能到达 或者 不能到的点是没用的,对于剩下的点, 是固定的,对于 这些值做差分约束。
同上一题,做差分约束即可。
拆点后网络流建图,转移的边只要给相邻的之间连,直接跑费用流,注意相等的之间和 同余之间要连不选择直接转移的。
同上一题,把真实源点和虚拟源点之间的流量限制改为 即可,她大概是想要卡掉上一次的 dp 做法。
发现最后一个值的性质是恰好出现一次,但是第一个值也有这个性质,因此先枚举第一个值,随后一直取只出现一次的数,构造后 check。