2025年7&8月习题集
2025年7&8月习题集
- P4565 [CTSC2018] 暴力写挂。拆贡献、点分治、虚树。
- arc203_c。组合数。
- abc417_g。可持久化平衡树,复杂度分析。
- CF1519F。Hall 定理,状压 DP。
- P10800 「CZOI-R1」卡牌
- P4094 [HEOI2016/TJOI2016] 字符串
1. P4565 [CTSC2018] 暴力写挂
考虑将原式转化
考虑对左树点分治,记一个点到分治重心的距离为 \(dep\),则一个点的权值为 \(d(x)+dep_x\)。然后考虑右树的贡献怎么办。
先把左树不同子树的点染不同颜色,当前连通块的点根据右树建虚树,那么把右树的贡献挂在 LCA 上,用 DP 找到子树内不同颜色的点的最大权值即可,只需记录两种不同颜色的最大权值即可转移。
复杂度 \(O(n\log^2 n)\),\(O(1)\) LCA 后瓶颈在建虚树时的排序,换成基数排序可以做到 \(O(n\log n)\)。
2. arc203_c
首先 \(K<H+W\) 是容易的。我们只考虑 \(K=H+W\)。
分两种情况:
- 最短路径长度为 \(H+W-2\)。
此时我们如果随便选两条边插入 \(K=H+W-2\) 的方案数里,多的情况只可能是出现如下图形:
存在路径 \((i,j)\to(i,j+1)\to(i+1,j+1)\) 和 \((i,j)\to (i+1,j)\to(i+1,j+1)\)。
如果已知这种图形在路径上的出现位置,方案数等同于从 \((1,1)\) 走到 \((H-1,W-1)\) 的方案数。枚举出现位置,所以减去的方案数为 \((H+W-3)\binom{H+W-4}{H-2}\)。 - 最短路径长度为 \(H+W\)。
发现出现恰好一次形如「右上右」或「下左下」,我们以前者为例。假设没有其他限制,那么方案数为其他随便排的方案数减去特殊图形的位置,为 \(\binom{H+W-3}{H}(H+W-2)\)。排除特殊图形前有 \(H\) 个下的方案数与之后有 \(H\) 个下的方案数,因为此时会超出边界,方案数为 \(\sum_{i=0}^{m-3}\binom{n+i}i\),这个式子可以看做从 \((0,0)\to(n,i)\) 的方案数之和,即 \((0,0)\to(n+1,m-3)\) 的方案数,为 \(\binom{n+m-2}{m-3}\)。
3. abc417_g
考虑可持久化 FHQ_Treap,每次把 \(L_i,R_i\) 的平衡树合并成 \(i\)。但我们发现如果随机赋权,因为期望树高是树大小的对数,而树大小每次翻倍,树高会每次加一。
考虑按照两棵树根节点的 \(sz\) 合并,以 \(\frac {sz_x}{sz_x+sz_y}\) 的概率把 \(x\) 作为根。注意如果 \(sz_x+sz_y>Inf\),那么要把 \(sz_y\) 右边截到 \(Inf\)。
时间复杂度 \(O(n\log V)\),空间复杂度 \(O(n\log V)\)。
4.CF1519F
对于一种上锁方案,如果上了 \(c_{i,j}\),则在左部点为箱子,右部点为锁的二分图中,左 \(i\) 右 \(j\) 连一条边,则一组可行的方案要求满足:
对于任意的箱子集合 \(S\) 有
其中 \(N(S)\) 为集合 \(S\) 在二分图中的邻域点集。
发现这个条件有点像 Hall 定理,考虑把每个箱子拆成 \(a_i\) 个点,每把锁拆成 \(b_i\) 个点。我们发现,一个方案合法的条件就是,左部点存在完备匹配,考虑 DP。
设 \(f_{i,j_1,j_2,\dots,j_m}\) 表示考虑完左边 \(i\) 个箱子,右边第 \(i\) 把锁还有 \(j_{i}\) 个点没有被选,\(j\) 可以用五进制压起来。
做记忆化搜索,表面上复杂度是 \(O(n5^{2m})\),其实复杂度应该更低,因为一个状态可达要满足 \(\sum _{k\le i} a_k=(\sum b)-\sum j\)。所以飞快就跑完了。
5.P10800 「CZOI-R1」卡牌
相当于对于任意有序数对要满足 \(a\le a_i\Rightarrow b>b_i\),对于相同的数的对只要满足一个方向就行。
从大到小枚举 \(d\),那么 \(a,b,c\) 每次前缀多删一段,我们记录 \(va_i,vb_i,vc_i\) 表示第一次删掉的时间,那么选择一种 \(a,b,c\) 对答案的贡献则为 \(\min(va_i,vb_i,vc_i)\),这样 \(d\) 对 \(a,b,c\) 的限制就考虑完了。
我们枚举这个 \(\min\) 值是谁,假设是 \(a\),那么对 \(b,c\) 有下界限制。我们枚举 \(a\) 的值,那么对 \(b,c\) 又有一个下界限制,与前面的下界限制拼起来。于是 \(a\) 对 \(b,c\) 的限制就考虑完了,考虑 \(b\) 对 \(c\) 的限制。
当 \(b\) 增大时,\(c\) 的下界会不断减小然后小于 \(a\) 对 \(c\) 的下界,找到这个使 \(c\) 的下界小于 \(a\) 对 \(c\) 的下界的 \(b\),前面的 \(b\) 的贡献可以预处理,后面的 \(b\) 的贡献都是 \(c\) 的下界。可以二分找到这个 \(b\),也可以当 \(a\) 变化时移动指针。
可以做到 \(O(n\log n)\) 或 \(O(n)\)。
6. P4094 [HEOI2016/TJOI2016] 字符串
水黑。每次询问子串 \([a,b]\) 中所有子串与子串 \([c,d]\) 的 LCP 的最大值。
考虑二分答案,那么对于答案 \(mid\),子串左端点可以取到 \([a,b-mid+1]\) 范围内。
对原串建 SA,然后找到 \([a,b-mid+1]\) 内最大的小于后缀 \(c\) 的后缀,找到最小的大于后缀 \(c\) 的后缀。
那么对原串按顺序建主席树即可,复杂度 \(O(n\log ^2n)\)。

浙公网安备 33010602011771号