2025.12.23 NOI 模拟赛 题解
T1 P130204 [省选二十连测第七套 ] --T1--R2T1 \(\quad\) P6235 [eJOI 2019] 矩形染色
题意
一个 \(m\times n\) 的矩形,每条广义对角线(左上到右下,左下到右上各 \(n+m-1\) 条)都有代价,求能覆盖整个矩形的最小代价总和,\(m,n\le2\times10^5\)
分析
对于每个点 \((x,y)\),等价于要求一条左上到右下和一条左下到右上之中至少选择一条,转化为最小割可以做到 \(O(nm\sqrt{n+m})\)
发现 \(x+y\) 为奇数和为偶数情况独立,分别考虑
对于每一种情况,都是左部点连向右部点的一个区间,每个左部点和右部点都可以匹配若干次
区间按右端点升序排序,依次枚举,贪心地匹配
用线段树或 std::set 维护可以做到 \(O((n+m)\log(n+m))\),用并查集可以做到 \(O((n+m)\alpha(n+m))\)
T2 P130205 [省选二十连测第七套 ] --T2--R2T2 \(\quad\) P10759 [BalticOI 2024] Jobs
题意
给定一棵树,每个结点有权值 \(x\),初始值为 \(s\),对树 \(\text{bfs}\),每 \(\text{bfs}\) 到一个新点则加上其权值,需要保持权值非负,求能加上的权值总和的最大值,\(n\le 2\times10^5\)
分析
考虑 \(\text{dsu}\)
保存若干二元组 \((b,v)\),表示若目前值 \(\ge b\) 则可加上 \(v\)
对于一个结点,先合并其所有儿子的二元组,然后考虑加入当前结点
若权值 \(w_u\ge 0\) 则直接插入 \((0,w_u)\)
否则取出 \(b\) 最小的 \((b,v)\),令其变为 \((b-w_u,v+w_u)\)
变化后可能 \(v<0\),则不断取出剩余部分中 \(b\) 最小的与之合并,显然它并上 \((b_2,v_2)\) 的结果为 \((\max(b,b_2-v),v+v_2)\)
\(v\ge 0\) 之后(若并上所有二元组后仍然 \(v<0\) 则清空当前点的集合),不断尝试向后合并直到 \(b\) 最小
统计答案是简单的
使用可并堆可以做到 \(O(n\log n)\)
T3 P130206 [省选二十连测第七套 ] --T3--R2T3 \(\quad\) P7856 「EZEC-9」模糊众数
题意
给定 \(a_{1\sim n}\),\(q\) 次询问,定义一次操作为选择一个 \(a_i\) 加一,每次给定 \(x\),判断使 \(x\) 成为 \(a\) 的众数之一所需最小操作次数,\(n,q\le10^5,1\le a_i\le10^9\)
分析
先考虑对于一个 \(x\) 如何求解
先枚举众数出现次数 \(c\)
令 \(s_i\) 表示 \(a\) 中 \(i\) 的出现次数
从 \(1\) 到 \(V\) 枚举值 \(v\),若 \(s_v>c\) 则将其中 \(s_v-c\) 个移到下一层
最后取出 \([1,x]\) 中最后 \(c\) 个移到 \(x\),若不足 \(c\) 个则无解
用权值线段树维护 \(s\),容易 \(O(\log V)\) 求出一个 \((x,c)\) 对应的答案,实际上用到的值都是 \(c=1\) 时用到值的子集,显然数量不超过 \(n\),因此通过一定方式离散化后可以将单次查询做到 \(O(\log n)\)
对于一个 \(c\) 修改次数(\([1,x]\) 内移动 \(c\) 个贡献容易统计,只需要修改 \(s_v>c\) 的移动,求出答案后还原)显然为 \(O(\frac nc)\) 的,其复杂度为 \(O(\frac nc\log n)\)
由此容易容易 \(O(\sum_c \frac nc\log n)=O(n\log^2 n)\) 求出一个 \(x\) 的答案
对于一个 \(x\),令 \(f(c)\) 表示 \((x,c)\) 的答案,可证 \(f\) 是凸的(可能有一个后缀为 \(+\infty\))
由此可以整体二分,做到 \(O(n\log^2 n+m\log n)\),空间复杂度线性
比赛结果
\(40+11+25\),\(\text{rk}9\)

浙公网安备 33010602011771号