2026.1.24 NOI 模拟赛 题解
T1 P130344 [省选二十连测第十六套 ] --T1--树上操作
题意
给定 \(n\) 个结点的树 \(A\) 和 \(m\) 个结点的树 \(B\),每个结点的儿子有编号,根为 \(1\),每次可以用 \(a\times w\) 的代价选择 \(A\) 中一个点的儿子序列的区间(可以为空),新增一点替换这一区间(\(w\) 为该点向其父亲的连边),并将这一区间作为新增点的儿子,可以用 \(b\times w\) 的代价选择 \(A\) 中一个点将其与父亲合并(\(w\) 为该点向父亲的连边),用 \(c\) 的代价选择一条原有边权值加一或减一,求出使得 \(A\) 变为 \(B\)(忽略结点编号,但需要比较边权)的最小代价,\(n\le50,m\le2000\)
分析
令 \(w^1_u\) 表示 \(A\) 中 \(u\) 到父亲的连边,\(f^1_u\) 表示 \(A\) 中 \(u\) 的父亲,同理对 \(B\) 定义 \(w^2_u\) 和 \(f^2_u\)
假如先将 \(A\) 缩为一点,再扩张为 \(B\),则代价为
假如 \(A\) 中保留 \(p_{1\sim k}\)(按 \(\text{dfn}\) 排序)及它们到父亲的连边,分别对应 \(B\) 中的 \(q_{1\sim k}\),则代价变为
考虑 \(dp\) 出后一部分的最小值
令 \(dp_{u,l,r}\) 表示在 \(B\) 中子树 \(u\) 选 \(\{q\}\),在 \(A\) 中 \(\text{dfn}\) 为 \([l,r]\) 中结点中选 \(\{p\}\) 时,\(-b\sum_i w^1_{p_i}-a\sum_i w^2_{q_i}+c\sum_i|w^1_{p_i}-w^2_{q_i}|\),显然要求 \(p\) 和 \(q\) 对应虚树结构相同,答案即为 \(dp_{1,2,n}+base\)
\(\text{dfs}\) 树 \(B\) 时,要将儿子 \(v\) 并入子树 \(u\) 时
若 \(u\ne 1\),则考虑选择 \(u\) 为一个 \(p\),令 \(L,R\) 为 \(A\) 中子树的 \(\text{dfn}\) 区间,转移为
最终 \(dp_{u,l,r}\gets dp_{u,l+1,r},dp_{u,l,r}\gets dp_{u,l,r-1}\)
注意转移顺序
时间复杂度 \(O(n^3m)\)
T2 P130345 [省选二十连测第十六套 ] --T2--序列变换 \(\quad\) QOJ #10007. Holes in Queue \(\quad\) CF1060G Balls and Pockets
题意
对于一个无限序列 \(v_{1\sim }\),给定 \(a_{1\sim n}\),定义一次操作为同时删去 \(v\) 的第 \(a_i\;(1\le i\le n)\) 个元素,给定 \(m\),初始 \(v_i=i\),对其操作 \(m\) 次,\(q\) 次询问给定 \(x\) 查询最终 \(v\) 的第 \(x\) 个值,\(n,q\le5\times10^5,m,x\le 10^{12}\)
分析
取极大值 \(\text{inf}\),区间 \([\text{inf},\text{inf}+n)\) 中的值在不断操作的过程中取遍了所有位置,由此所有位置都可编号为唯一二元组 \((p,c)\),表示被 \(\text{inf}+p-1\) 操作 \(c\) 次后覆盖到
对于每次询问 \(x\),求出对应的 \((p,c)\),则 \((p,c+m)\) 对应位置即为答案
扫描两次,第一次求出所有位置对应的二元组,第二次由二元组找到对应位置
以上过程容易树状数组做到 \(O((n+q)\log n)\)
可以推广到每次询问 \(m\) 不同的情况
T3 P130346 [省选二十连测第十六套 ] --T3--图的定向 \(\quad\) QOJ #13283. Strong Connectivity Strikes Back
题意
给定一张有向图,定义边的一个子集合法,当且仅当只存在一种给边集中边重定向的方案,使得新图和原图强连通分量一致,求合法子集的最大大小与方案数,\(n,m\le2000\)
分析
显然每个 \(\text{SCC}\) 内部和所有 \(\text{SCC}\) 之间的部分独立,因此分开考虑
先考虑 \(\text{SCC}\) 之外的部分,即对原图缩点,得到一张 \(\text{DAG}\),需要记录重边数量
定理 \(1\):若不存在重边,一条边 \(u\to v\) 可以被选入子集当且仅当不经过 \(u\to v\) 可以从 \(u\) 到达 \(v\)
证明:
- 必要性显然,考虑充分性,即任意翻转不满足上述要求的边,都会使得新图和原图的强连通分量不同
- 翻转任意一条 \(u\to v\) 后,显然可以找到一条不经过被翻转边和 \(u\to v\) 后从 \(u\) 到 \(v\) 的路径,形成环,与原图的强连通分量不同
推广到存在重边的情况,若一条 \(u\to v\) 重复 \(c\) 次,若满足要求则子集大小加上 \(c-1\),方案数乘以 \(c\),否则子集大小加上 \(c\),方案数不变
然后求出原图的所有 \(\text{SCC}\) 依次处理,以下只考虑一个 \(\text{SCC}\)
枚举 \(\text{SCC}\) 每条边去掉,剩余部分缩点
若得到一个 \(\text{SCC}\),则这条边必然不能选入子集
若得到的不是链,则当前边必然可以选入子集,子集大小加一
若得到一条链,且链存在重边,则这条链对应原 \(\text{SCC}\) 的一个环,环上非重边都可加入子集,显然最大值的方案数唯一,实现时此处只需要令子集大小加一,剩余贡献会在枚举其余边时计入
若得到链且不存在重边,对应到原 \(\text{SCC}\) 表示一个环,给边编号求出环上边的集合 \(E\),对于所有满足此条件的边得到的边集,设 \(E\) 的集合为 \(\mathcal E\),取其中最大的一个,非最大的每个对子集大小贡献为 \(|E|\),对方案数无贡献,最大的一个对子集大小贡献为 \(|E|-1\),对方案数贡献为 \(|E|\)
容易做到 \(O((n+m)^2)\)
比赛结果
\(0+60+50\),\(\text{rk}4\)

浙公网安备 33010602011771号