集训记录 2026 Oct
20261002
A 硬拆位然后矩阵快速幂,签。
B Kruskal+线性基可以拿到 60 分。正解要注意到 \(0\) 显然是没有贡献的,然后把剩下的按正负号分类,并且分讨负数个数的奇偶,观察哪些权值会被插入线性基:
- 都是正数,当然是每个元素自己。
- 没有负数,但是有 \(0\),当然是 \(0\)。
- 奇数个负数,全乘在一起,扣掉绝对值最小的负数和另外某个负数,以及扣掉某个负数。
- 偶数个负数,扣掉某个负数,或者扣掉某个整数与绝对值最小的负数。
然后排序算贡献。
C DS 题。
- typ=1,每次减去 lowbit,显然势能线段树,\(O((n+m)\log n\log V)\)。
- typ=2,上强度了。难点在于经典 trick:若 \(x\ge y\),则 \(x−\operatorname{popcount}(x)\ge y−\operatorname{popcount}(y)\)。知道之后就很简单了,树剖求 \(k\) 级祖先,复杂度 \(O((n+m)\log n\log V)\)。
- typ=3,注意到每个数在若干次操作后一定到达最近的 \(32\) 倍数,并且这些 \(32\) 倍数都在一条“主链”上,这上面是有单调性的。于是同样势能线段树,维护主链与非主链最大值,区间内元素都在“主链”上可以打 \(\text{tag}\),否则递归更新,复杂度 \(O((n+m)\log n\log V)\)。
D 貌似是个有点牛的题,之后再补。
20261003
A 精细建模,随便用线段树或者平衡树优化一下 Dijkstra。
B 权值线段树优化 DP。
C 显然是树上背包,然后要换根,显然重新合并背包复杂度是错的,那么考虑前后缀合并或者大力多项式除法都可以做到扣掉一部分贡献的回退背包,任选一种均可。
D 普及题。显然状压,然后考虑加入每一个点时它的所有邻边,如果在集合内了那么自己的贡献就是正的,否则是负的,至于有向边多一维记录上一位即可。
20261004
A 大力拆整除,用树状数组维护,1log
B 好像也是有点牛的题,不会
C Sub1 考虑从右上角开始走,每次询问能排除掉一行一列。Sub2 对角线有 \(19\) 个格子,对应构造即可(右下回答 \(\inf\),左上回答 \(1\),对角线直到最后一次再回答 \(x\))
20261005
A 糖,注意树剖千万别写错!!!
B 暴力多项式乘除法,也是撤销背包,但是枚举终止元素和贡献个数无疑是难做的,会变成 \(O(n^3)\);把枚举终止元素和贡献个数换成枚举有贡献的元素和自身索引就很好做了。
C 直接单调栈 + 区间历史和树状数组即可。
D 也是个神仙题,结论是最小操作次数 \(=2k-\) 弱连通分量个数 \(-\) 最大无环集合个数。构造就是把每个弱连通分量内不在最大无环集合中的元素移到同分量拓扑序最早的最大无环集合内的元素,然后变成了 DAG,直接拓扑序往前传递,证明下界是容易的。
20261006
A 莫反然后发现是诈骗题。
B 考虑按 \(a\) 降序排序,每次把当前元素插入到 \(a\) 较小的集合,这样显然 Werkey 一定不会嫉妒 Tom。那么此时把 \(b\) 较大的当 Tom 即可。
C 显然维护 \(55\) 个同余类,每个类需要一个树状数组差分维护贡献,计算等差幂和,然后还卡空间要离散化。
20261007
A 签。
B 使用结论:\(\lvert\max\{a,b,c\}-\min\{a,b,c\}\rvert=\lvert a-b\rvert+\lvert b-c\rvert+\lvert c-a\rvert\),然后容斥一下变唐题了
C CF1859F。离线,枚举 \(k\),多源最短路求出每一个点学习再回来的最短时间。然后每一条路径贡献拆开,倍增求最值。
20261017
A 贪心排序方式可以通过列不等式得出,然后变唐题了。
B 显然可以贪心,主席树或者扫描线一下就做完了。
C 转成概率 dp,然后发现用偏序关系排序后树状数组优化一下就做完了。
20261018
A,B 签
C 有超级数学的爆标做法。
20261024
A 二分。
B 观察到单调性方能做到线性。
C 多项式 \(\exp\) 的组合意义。
20261025
A 随便做。
B 考虑笛卡尔树分治,每次分治中较小区间的长度和是 \(O(n\log n)\) 的,于是可以拆成 \(O(n\log n)\) 个单点询问。然后单点贡献数量显然是 \(O(n)\),考虑值域分块平衡复杂度,对前 \(\omega\) 位开桶,后 \((\log V)-\omega\) 位子集和/超集和暴力贡献,复杂度 \(O(n\frac{V}{2^\omega}+n\log n2^{\omega})\),当 \(\omega=O(\frac{\log V}{\log\log n})\) 时有最优复杂度 \(O(n\sqrt{V\log n})\),实现时取 \(\omega=5\)。
C 严肃简单题,贪心一下再用线段树维护。
20261026
A 随便做。
B 连续段 dp。三次方的做法就是从小到大插入,发现死在要多记录一个末尾,于是考虑枚举末尾,那么想到前面的路径在末尾两边横跳,想到每一个连续呆在自己区间内的刻画为连续段。设 \(f_{i,j}\) 为加入 $[1,i] 后有 \(j\) 个以 \(U\) 结尾的连续段,\(g_{i,j}\) 可类似地设计状态,分类讨论转移即可。合并答案时发现两边最多差 \(1\) 才能合并,方案数就是 \(f_{a,h-1}\times g_{b,h+1}\times a!b!\),如果 \(a=b\) 还要额外乘 \(2\)。
C 博弈论,考虑每次剥掉直径端点(都不想去),然后猜测 \(Bob\) 必胜当且仅当在直径中点,暴力发现是对的,于是考虑长链剖分优化。设 \(A(u,j)\) 表示点 \(u\) 深度不超过 \(j\) 的子树数量,转移就是 \(A(u,j)=\prod(1+A(v,j-1))\),感觉可以长链剖分维护但是要实现 \(O(n)\) 还要维护后缀的加法乘法标记,每次从上往下遍历的时候要下传标记,然后给一个末尾打标记。接下来容斥,设 \(u\) 是 \(1\) 的儿子,容斥一下,深度为 \(d\) 的答案就是 \(\prod A(u,d)-\prod A(u,d-1)-\sum A(u,d)\prod_{v\ne u}A(v,d-1)\),注意这里复杂度也不要写假了,别忘了还可能没有逆元,要前后缀积。
D
法一:
令最终的二元组为 \((a_i,b_j)\)。考虑有哪些 \((i,j)\) 是可能取到的。不妨令 \(i\le j\)。先枚举 \(i\) 处进行的操作类型,则 \(i\sim n\) 中的操作类型均已确定。若 \(2\sim i-1\) 中的操作结束之后的二元组为 \((x,y)\),则 \(i\sim n\) 中的操作对 \(y\) 的影响一定形如:
其中 \(l\le r\) 是仅由 \(i\sim n\) 中的操作决定的参数。因此 \(j\) 只有两种可能的取值:
\(l,r\) 可以在扫描 \(a_i\) 的过程中用线段树维护相应信息,以 \(O(n\log n)\) 求出。用线段树维护 \(2\sim i\) 操作结束后 \(x=a_i\) 情况下的 \(y\) 的最大值与最小值即可。
法二:
注意到将所有合法的 \((x,y)\) 按 \(x+y\) 排序后,\((x,y)\) 的下一个一定是 \((x+1,y)\)、\((x,y+1)\),或 \((x+1,y+1)\),一一验证即可。
证明:所有的 \((x,y)\) 对存在一个全序关系,在经过操作后也不会变,同时每个 \(x=i\),\(y=j\),都有解。
20261028
A 简单题。
B 问图中边数最多的边仙人掌。朴素的想法是每次加入一个环,这样做要子集枚举,是 \(O(3^n\operatorname{poly}(n))\) 的。考虑维护一个路径,每次加点,如果记录当前使用过的点集、起点和终点可以做到 \(O(2^nn^3)\)。考虑环数更少的状态不会带来更优的后续贡献,只需要把环数较多的那个状态的路径退掉就一定不劣于环数较少的状态,于是把起点维作为伴随转移记录的集合即可,时间复杂度 \(O(2^nn^3)\),空间复杂度 \(O(2^nn^2)\)。

浙公网安备 33010602011771号