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\),则代价为

\[base=b\sum_u w^1_u+a\sum_u w^2_u \]

假如 \(A\) 中保留 \(p_{1\sim k}\)(按 \(\text{dfn}\) 排序)及它们到父亲的连边,分别对应 \(B\) 中的 \(q_{1\sim k}\),则代价变为

\[base-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}| \]

考虑 \(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\)

\[dp_{u,l,r}\to dp'_{u,l,r} \]

\[dp_{v,l,r}\to dp'_{u,l,r} \]

\[dp_{u,l,k}+dp_{v,k+1,r}\to dp'_{u,l,r} \]

\(u\ne 1\),则考虑选择 \(u\) 为一个 \(p\),令 \(L,R\)\(A\) 中子树的 \(\text{dfn}\) 区间,转移为

\[dp_{u,L_v,R_v}\gets dp_{u,L_v+1,R_v}-b\times w^1_u-a\times w^2_v+c|w^1_u-w^2_v| \]

最终 \(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\) 不同的情况

MX

QOJ

CF

参考

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)\)

MX

QOJ

比赛结果

\(0+60+50\)\(\text{rk}4\)

posted @ 2026-01-26 20:26  Hstry  阅读(0)  评论(0)    收藏  举报