复杂度鉴赏
诸如 之类的奇怪复杂度,这种题目可能有两种情况:
- 某些自然成立的不等式,导致实际需要枚举的量并不多,除法或开根出现在指数上带来极大的复杂度优化。
- 两种不同复杂度的算法皆能解决这个问题,平衡后得到一个奇怪的复杂度。
#T241115E. 【昊天塔】对半博弈
一开始给定一个固定的数组 ,长度为 ,值域为 。另有一个长度为 的数组 ,在其中每个位置填上一个 中的整数,显然有 种方案。
Alice 和 Bob 轮流对 进行操作,每次将 剪成左右长度相等的两半,然后选一半丢弃,另一半保留,直到最后剩下一个数 ,游戏的得分即为 。Alice 先手,她希望最终得分尽量大,而 Bob 希望得分尽量小。
现在,想知道对于所有 种填 的方案,最终得分总和会是多少?答案对 取模。
。
来规范一下题意:我们有一个决策树,从上往下第奇数层取儿子的 ,偶数层取儿子的 ,叶子权值是 。
求所有 对应的方案的根的权值和。
考虑 互不相同,此时相当于 ,也就是每个叶子独立随机,此时我们有状态 表示节点 权值为 的概率,转移是设 为 的前缀/后缀和,则取 就是 , 同理。
使用经典的 原理,显然只要对 求出叶子中有 个 的所有情况中有多少种根是 ,就可以轻松实现给定 可重集,求出答案,这样就把计算拆分为了 原理和计算可重集。
但这个形式是难以 的,其关键在于绑定这件事我们无法约束,但我们发现:绑定大小 的组至多 个,我们可以直接枚举这些组的 取值,剩下的单点来 。
注意这里特殊的 原理:一个大小为 的等价类为 ,我们应当仅仅将其视为一个 ,这是因为它们已经强制绑在了一起,我们实际的自由度只有 。
可重集的系数是什么呢?考虑 原理划分为了 和 ,且有 个 的, 个 的,则系数显然为 ,虽然我们并不会对于 算这个,但是这显然是关于 的 次多项式,插值解决即可。
复杂度 。
CF1149D Abandoning roads
一张 个点 条边的无向联通图,只有 两种边权(),对于每个 ,求图中所有的最小生成树中,从 到 距离的最小值。
。
只有两种边权,我们当然考虑最小生成树有什么性质。
先加入所有的 边形成若干连通块,我们发现,在行走”最短路“的过程中,我们通过 边离开一个连通块后不可能再通过 边回到之前走过的连通块,否则这条路一定不在最小生成树上,而满足了上述条件显然一定在最小生成树上。
在最短路的过程中额外记录 表示走过了哪些连通块,我们得到了一个 的做法。
但我们发现有些连通块太浪费了,具体来说,大小为 的连通块显然没必要记录,大小为 的连通块内部最多 ,外部最少 ,所以我们只需记录特殊的 个连通块。
注意我们必须删掉同一连通块内的 边。
复杂度 。
Gym102978e Edge Subsets
一个无向图,每条边满足 。
求匹配个数。
。
超牛预判,前一天刚写下了题目描述第二天被云斗搬了,但是鉴于完全看不懂题解只能说被透了一半,在知道大方向的情况下自己做出。
若 显然可以按 拆分成 个子问题处理,所以默认 。
我们首先会解决 的情况,直接顺着扫,状压之前 个有没有选即可,复杂度 。
若 ,则我们以按 划分等价类,则等价类的大小很小。
直接状压这个等价类内的元素是否选择,然后按 (x+=A)%=B 的顺序处理这些等价类,像网格图的轮廓线 一样按格处理即可。
由于我们要转一个圈,我们只能先钦定首个等价类内的元素“内部以及与之前”占用了 ,最后推一轮回来把 贡献给答案,复杂度 。
平衡后可以平衡到 。
团计数 CCPC Online 2023 C. Clique Challenge QOJ7514
给定图,问有多少个团。
。
在 时,对团计数可以对补图使用 的独立集计数:令 ,则 ,当 时 中的点都 ,则我们可以记搜, 时分支最多 个。
考虑类似于三元环计数的小度连大度,这种连边方式可以证明新图度数 (小度显然出度 ,大度最多连 个)。
考虑用团中度数最小的点(相同度数钦定一个顺序)来统计整个团。
于是我们找到了一个规模为 的问题,使用上面的 算法解决即可。
复杂度在图是一个 的团最大,为 。
实现上当然没有必要写成搜的形式,后一半点直接对集合 ,然后枚举前一半点选不选求答案。
P9318 [EGOI 2022] Lego Wall / 乐高墙
你要用 和 密铺 (注意没有 的竖条),且若上下紧挨的积木之间连边,该图只能有一个连通块。
计数方案。
。
这么大,我们当然要先想出 做法。
考虑经典的容斥,我们发现不合法的图,总是满足每个连通块是一个上下顶满边界的长方形,所以我们从左往右 ,设 表示前 列合法的情况数, 表示 的平面随便铺的方案数,则:
f_i=g_i-\sum_{1\le j
复杂度 。
平衡复杂度,注意这里是 互相抗衡而不是固定 调节块长 ,所以我们直接将 写成 然后将 视作“块长”来调节即可,,复杂度为 ,可以通过。
CF2002G Lattice Optimizing
一张 的网格图,每条边上有数字,你只能往下和右走,从 到达 ,找出 最大的路径。
。
虽然 只有 ,但是路径上有 个数,直接集合 dp 是 的。
考虑 meet-in-the-middle,以地图副对角线劈开,每边有 个数,你发现合并需要求超集/子集,复杂度又变得奇怪起来了。
你发现只需要一边求子集,另一边直接 query,这太不公平了!于是我们以 分开,用 那边求子集,复杂度 。
UOJ Round #28 A 偷吃蛋糕
超难爆搜,无法战胜。
关键是证明需要动用 zak,过于困难了。