2026暑假总结
每天晚上刷B站有点刷腻了,干脆来写一写总结
还没补的题就先鸽着,补过了的题尽量都写一下
6-24/6-26
两天做了11道构造,如何呢
当然还是有几道好题的,得详细讲一下
Make It Connected 分类讨论一下,发现图除了恰好为两个不连通的完全子图,其他时候答案最大为 \(2\),否则把小子图一个一个加到大子图里即可
Rectangular Congruence \(\Large\star\)
我们发现在 \(a<b,c<d\) 时 \(ac+bd\not\equiv ad+bc\pmod n\) 恒成立,证明移项后因式分解得到 \((b-a)(d-c)\) 显然不为 \(0\)。又因为 \(n\) 是质数,\((b-a)(d-c)\) 同样不可能是 \(n\),所以原式成立
那么令 \(a_{i,j}=ij\bmod n\),就可以满足前两个条件,再来考虑主对角线上的特值
我们把所有 \(a_{i,i}\) 全部加上 \(b_i-i^2\),即可满足条件,为了使条件二仍然成立,可以把所有 \(a_{i,j}\) 加上同样的数来抵消,即 \(a_{i,j}=(b_i+ij-i^2)\bmod n\)
Equal Binary Subsequences 首先特判掉无解。对于每一对相邻下标,如果 \(s_{2i-1}\not=s_{2i}\),则交替取出其中的 \(0\) 和 \(1\),得到的一定是一个 \(0101\) 交替的序列,循环左移之后变成了 \(1010\) 交替,此时显然有 \(s_{2i-1}=s_{2i}\),奇数位子序列等于偶数位子序列
Grid Xor 将网格按照对角线交替的方式分成两半,此时有贡献的格子画个图容易看出,随便找个规律带进去算就行了
Range = √Sum 令前 \(n-1\) 位为 \(4n+4\),第 \(n\) 位为 \(4n+5\),那么 \(\sqrt{\text{sum}}=2n+1\),然后对与每一对 \((i,n-i+1)\),前者减去 \(n-i+1\),后者加上 \(n-i+1\),可以刚好满足题目要求
Tokitsukaze and Two Colorful Tapes 把 \(a_i\) 与 \(b_i\) 连边,图一定形如若干个环,为使答案最大,环内一定是大小交替放置。大小为 \(m\) 的环贡献为最大的 \(\lfloor\frac{m}{2}\rfloor\) 个数的和减去最小的 \(\lfloor\frac{m}{2}\rfloor\) 个数的和。易得答案为 \(2(\sum \lfloor\frac{m}{2}\rfloor)(n-\lfloor\frac{m}{2}\rfloor)\)
Equal Tree Sums \(\Large\star\)
hzk 学长讲的题
题目要求 \(s_1-s_u = s_{v_1}=s_{v_2}=\dots=s_{v_k}\),那么有 \(a_u=s_u-\sum s_v=s_u-(d_u-1)(s_1-s_u)=s_1 - d_u(s_1-s_u)\)
令 \(s_1=0\),我们只需要做到 \(s_u=-s_v\) 即可。那么容易想到黑白染色,黑点 \(s_u=1\),白点 \(s_u=-1\)。代回去得到黑点 \(a_u=d_u\),白点 \(a_u=-d_u\)
Half Queen Cover 设答案为 \(k\),那么要求 \(k\ge 2(n-k)-1\),得到 \(k_\min=\frac{2n+1}{3}\),构造随便手完一下就行了
Hemose on the Tree 反证法易证答案不小于 \(n\),猜想答案恰好为 \(n\)。把所有根以外的 \(u\) 和 \(u\) 与其父亲的连边权值赋为 \(k,k\oplus n\),那么每个点的 \(\text{dis}\) 一定为 \(0\) 或 \(n\)
Fair Share \(\Large\star\)
对于每一个序列,把第 \(2i\) 位与第 \(2i-1\) 位连边,令其为 A 边
对于每一个数,把第 \(2i\) 次出现与第 \(2i-1\) 次出现连边,令其为 B 边
考虑这样建图后,图一定形如若干个偶环,且环内两种边交替出现,那么对图进行黑白染色即可
原理:A 边保证了每个序列被恰好分成两半,B 边保证了每个数被恰好分成两半
Circular Spanning Tree 特判掉 \((\sum \deg) \bmod 2=1\) 与 \(\forall( \deg \bmod 2=0)\) 两种无解情况。若 \(\forall(\deg\bmod 2=1)\) 则 \(n\) 为偶数,连一个菊花图即可;否则 \(\deg\bmod 2=1\) 的数量为偶数,序列循环左移后分成若干段 \((0,0,\dots 0,1)\),令第一个 \(0\) 为根,段内连成一条链,段首与根相连即可
7-6
王队讲的 LGV 引理和 Matrix-Tree 定理
LGV 引理
下文中的“图”均指 DAG,可以存在重边
令 \(P\) 为图中的一条路径,\(F(P)\) 为路径中所有边权的积,\(G(u,v)\) 为所有 \(u\) 到 \(v\) 的路径的 \(F(P)\) 之和。特别地,边权为 \(1\) 时,\(G(u,v)\) 代表 \(u\) 到 \(v\) 的路径个数
我们有两个大小均为 \(n\) 且没有相同元素的点集 \(A,B\),分别为起点集与终点集。声明一个大小为 \(n\) 的路径集 \(S\),满足存在 \(T\) 为任意一个 \([1,n]\) 的排列,路径 \(S_i\) 为 \(A_i\) 到 \(B_{T_i}\),且路径间两两没有公共点。显然 \(T\) 若存在则一定唯一
令 \(R(T)\) 为排列 \(T\) 的逆序对个数
设 \(n\) 阶矩阵 \(M\) 为 \(M_{i,j}=G(A_i,B_j)\)
那么 LGV 引理的描述为:\(\det(M)=\sum\limits_{S}(-1)^{R(T)}\prod\limits_{i=1}^{n}F(S_i)\)
证明:我不会,但式子的组合意义可以理解为交点个数为 \(R(T)\) 的路径组的答案为后面那个 prod
显然,\(G(A_i,B_j)={b_j-a_i+n-1\choose n-1}\)
由于 \(a,b\) 均升序,则合法的 \(T\) 一定为 \(1,2,\dots,n\),所以 \(R(T)\not=0\) 的部分根据组合意义一定可以抵消掉
直接算行列式即可
我们发现两条不相交的路径一定是 \((1,2)\to (n-1,m)\) 和 \((2,1)\to (n,m-1)\),而反过来的路径一定相交。令 \(A_1=(1,2),A_2=(2,1),B_1=(n-1,m),B_2=(n,m-1)\)
考虑对于有交点的方案,把其最后一个交点后的部分反转,发现这个东西是一一对应的,且交点数量恰好一奇一偶,可以抵消
那么答案就是行列式 \(M_{1,1}M_{2,2}-M_{1,2}M_{2,1}\)
Matrix-Tree 定理
Matrix-Tree 定理用于解决图的生成树计数问题
无向图形式
设 \(n\) 阶度数矩阵 \(D\) 为:
设 \(n\) 阶邻接矩阵 \(A\) 为:\(A_{i,j}\) 为 \(i\) 与 \(j\) 之间的无向边数量
定义 Laplace 矩阵为 \(L=D-A\)
Matrix-Tree 定理的无向图形式描述为图的生成树个数为 \(\det L_k\)。\(L_k\) 为 \(L\) 去掉第 \(k\) 行与第 \(k\) 列且合并剩余部分得到的 \(n-1\) 阶矩阵。对于所有 \(k\in[1,n]\),公式均成立
在实际计算中,为了方便可以在行列式计算中将 \(n\) 减去 \(1\),视为去掉第 \(n\) 行和第 \(n\) 列
证明:我不会啊
有向图根向树形式
即生成树每条边都从儿子指向父亲
把 \(\deg_i\) 改为 \(\text{outdeg}_i\),其余不变
有向图叶向树形式
即生成树每条边都从父亲指向儿子
把 \(\deg_i\) 改为 \(\text{indeg}_i\),其余不变
Cayley 公式
有 \(n\) 个点的有标号无根树有 \(n^{n-2}\) 个
将其等价为 \(n\) 个点的完全图生成树个数,使用 Matrix-Tree 定理易证
7-10
杂题 + 广义串并联图 + SegBeat,数据结构就直接 skip 了
奇妙思维题。显然最严格的限制为前 \(k+1\) 个数大于后 \(k\) 个数。考虑 \(k\) 与限制强度的关系,发现 \(k\) 较小时,\(k\) 增长会使限制变严格;\(k\) 较大时,\(k\) 增长会使限制变宽松。那么最严格的限制在 \(k=\lfloor\frac{n}{2}\rfloor\) 时取到,下文记 \(k=\lfloor\frac{n}{2}\rfloor\)。
令 \(\forall a_i=n\),那么任意序列都由这个序列在某些前缀减去 \(1\) 得到的结果。设 \(K=\sum\limits_{i=1}^{k+1}a_i-\sum\limits_{i=n-k+1}^{n}a_i\),\(K\) 初始为 \(n\)
预处理出 \(c_i\) 表示前缀 \(i\) 减去 \(1\) 后对 \(K\) 的影响,显然会使 \(K\) 减少,这就变成了完全背包板子
第 \(i\) 个物品重量 \(c_i\),有无限个。求总重小于 \(n\) 的方案数
把所有数加到集合里,然后贪心地删除绝对值较大的数使总和在 \([l-m,l+m]\) 之间
只需要进行简单调整即可使总和恰好为 \(n\)。显然,最优的操作会使总和始终在 \([l-m,l+m]\) 之间,且每个总和只会出现一次。那么每个数只会删除 \(m\) 次,进行值域为 \(m^2\) 的多重背包即可。需要二进制优化
令 \(dp_{u,j\in[0,3]}\) 为在 \(u\) 子树内,\(u\) 点连了一条长度为 \(j\) 的链的最大收益
转移有三种:把 \((u,v)\) 接到 \(dp_{v,3} 上\);把 \((u,v_1),(u,v_2)\) 接到 \(dp_{v_1,0},dp_{v_2,2}\) 上;把 \((u,v_1),(u,v_2)\) 接到 \(dp_{v_1,1},dp_{v_2,1}\) 上
复杂度爆炸,考虑优化。令 \(f_{i,j\in[0,1]}\) 为考虑了若干个儿子,选择的 \(f_{v,0}\) 比 \(f_{v,2}\) 多 \(i\) 个,选择的 \(f_{v,1}\) 奇偶性为 \(j\) 的最大收益。于是变成 \(O(n^2)\) 的了
把儿子 shuffle 一下,发现 \(i\) 的期望不会超过 \([-\sqrt n,\sqrt n]\),于是变成 \(O(n\sqrt n)\) 的了
广义串并联图
广义串并联图,指没有同胚与大小为 \(4\) 的完全图的子图的无向联通图。也就是说,将所有 \(2\) 度点缩掉后,不存在 \(4\) 个点使它们之间两两有边
有三种广义串并联图方法:
- 删 \(1\) 度点:把度数为 \(1\) 的点删掉
- 缩 \(2\) 度点:若 \(w\) 只与 \(u,v\) 有连边,则把 \((u,w),(w,v)\) 缩成一条 \((u,v)\)
- 叠合重边:把两个重边删掉一条
可以证明,一个广义串并联图可以通过这三种方法缩成一个点
仙人掌加一条边属于广义串并联图。因为一个仙人掌的任意 \(4\) 个点之间最多有 \(4\) 条边,再加一条变成 \(5\) 条,显然不能形成完全图
令 \(f_x\) 为边 \(x\) 在生成树中的方案数,\(g_x\) 为边 \(x\) 不在生成树中的方案数
对于各个方法:
- 删 \(1\) 度点:把 \(f_x\) 乘到答案中
- 缩 \(2\) 度点:边 \(x,y\) 至少有一条边会出现在生成树上,否则中间那个点就不连通了,那么 \(f_w=g_ug_v,g_w=f_ug_v+f_vg_u\)
- 叠合重边:边 \(x,y\) 不会都出现在生成树上,否则就不是一颗树了,那么 \(f_w=f_ug_v+f_vg_u,g_w=g_ug_v\)
用 map 实现转移即可
7-11
杂题
显然,在初始排列确定后,任意两个不互质的数相对位置已经确定,我们将其连一条边,形成一个 DAG。后手对这个图用优先队列做拓扑排序即是最优策略
那么先手的操作可以转化成给无向图定向,使拓扑序尽可能小,可以直接从小到大连边求生成树,其他边都连反向即可
要求经过所有点,路径长至少为 \(n\),考虑构造长度恰好为 \(n\) 的方案。对于每个点记录一条路径,维护变色的那个点(没有则记为末尾)
每次加入一个点,把新点加到变色点后面,因为存在变色,新点一定和两条边中的一条颜色相同,在那边加上即可。使用双向链表维护
发现最多进行两次传递一定可以满足条件,使用数学归纳法容易证明。
然后把 \([1,n]\) shuffle 一下,逐项添加点。如果根有连向它的边或深度为 \(1\) 的点有连向它的边就直接连。否则就把它设为根,原来的根和深度为 \(1\) 的点变成新的深度为 \(1\) 的点
很久以前见过的题,但是没写过
容易发现如果操作后 \(a_i\) 变化了,那么他至多变成 \(\lfloor\frac{a_i}{2}\rfloor\),也就是说一个数最多存在 \(\log\) 次有效操作。而当 \(x\) 整除区间的 \(\text{lcm}\) 时,操作全部无效。于是开一个 tag 记录 \(\text{lcm}\),均摊是 \(O(n\log n)\) 的
7-13
WQS 二分 + 杂题
WQS 二分
用于解决一类恰好选择 \(k\) 个特殊物品的问题
令 \(f_x\) 为恰好选择 \(x\) 个特殊物品时的答案。如果题目满足 \((x,f_x)\) 是一个凸壳,即斜率单调,就可以使用 WQS 二分
我们二分一个 \(\Delta\),把特殊物品的贡献加上 \(\Delta\) 然后做无个数限制的 dp,并同时求出在贡献改变后这个最优解选择了多少个特殊物品。如果数量不对,就调整 \(\Delta\) 继续二分。可以证明,在满足凸壳条件下,这样做是正确的
板子题。二分后把所有白边权值加上 \(\Delta\),跑 Kruskal,求出生成树中有多少白边。白边多了就调大 \(\Delta\),少了就调小 \(\Delta\)。Kruskal 时需要优先选择白边,否则需要小数二分,可能会出现精度误差
考虑题目的要求可以转化为:选出 \(k+1\) 条不相交的链(可能为点),求最大总和
令 \(f_{i,j,l=0/1/2}\) 为:在子树 \(i\) 中,已经有 \(j\) 条完整的链了,且点 \(i\) 的度数为 \(l\) 时的答案。转移直接分类讨论暴力合并即可,复杂度为 \(O(nk^2)\)
然后发现在 \(i\) 确定时,\(f\) 数组关于 \(j\) 是凸的,于是可以进行 WQS 二分
二分 \(\Delta\),每选择一条链就把总和减去 \(\Delta\)。得出刚好选择 \(k+1\) 条链时的答案
由于正方形需要在对角线上,问题可以转化成关于 \((\min(r,c),\max(r,c))\) 的线段覆盖问题,然后每个线段至少要被一个区间完全覆盖,令 \((\min(r_i,c_i),\max(r_i,c_i))\) 为 \((l_i,r_i)\)
寻找一些性质。首先如果两个线段已经有包含关系了,小的那个不会对答案造成影响,可以直接删除,然后剩下的线段排序后所有 \(l\) 和 \(r\) 都是单调递增的

浙公网安备 33010602011771号