2025.3做题记录
qwq。
洛谷P5785 [SDOI2012] 任务安排
设 \(c\) 是 \(w\) 的前缀和,\(dp_{i,j}\) 是连接柱子 \(1\) 到 \(i\) 的最小价值。
有一个很显然的 \(O(n^2)\) dp 就是 \(dp_i = \min\limits_{1 \le j < i} \left \{dp_j + (h_i - h_j) ^ 2 + (c_{i - 1} - c_j) \right \}\)。
考虑把右边那个式子拆开,可以得到 \(dp_i = h_i^2+c_{i-1}+\min\limits_{1\le j<i} \left \{-2h_ih_j+h_j^2-c_j\right\}\)>
不难发现 \(\min\) 里面可以拆成一个一次函数 \(-2h_jx+h_j^2-c_j\),每次拿 \(h_i\) 进去查单点最小,用李超树维护就行。
三倍经验:P2365 & P10979
qoj5403 树数术
先考虑 \(k=1\) 时咋做:可以对每个 \(i \in [1,m]\) 预处理出 \(pre_i\) 表示最小的 \(j\) 使得 \(\operatorname{lca}(a[i:j])\) 在 \(i\) 的子树里,使用二分和 \(O(n \log n) - O(1)\) \(\operatorname{lca}\) 可以 \(O(m \log m)\) 求。然后二维数点就行。
当 \(k > 1\) 时,一个 \(a_i\) 满足条件就肯定是前面的区间的 \(\operatorname{lca}\)。二分出第一个前缀 \(\operatorname{lca}\) 是前面区间的 \(\operatorname{lca}\) 的点,然后二维数点。
洛谷P1552 [APIO2012] 派遣
不难发现选人肯定是贪心地选薪水小的。
考虑线段树合并维护子树内所有的薪水,然后线段树二分就行。
洛谷P3065 [USACO12DEC] First! G
不难发现一个串合法的必要条件是它的非空真前缀没有出现过。
不难发现在建出 trie 后,遍历串时当前节点的字母在新字母表上都要小于以它父亲为根的子树里和它深度一样的字母。
不难发现可以连边,边 \((u,v)\) 表示字母 \(u\) 在新字母表上要小于字母 \(v\),连完后判环就行。
然后就做完啦。
洛谷P8346 「Wdoi-6」最澄澈的空与海
很难发现完美匹配唯一的必要条件是左部点出度为 \(1\) 的点。
感性理解一下,如果出度为 \(0\) 那么都没有完美匹配,如果出度大于 \(2\) 那么肯定有一个点集可以换匹配。
然后可以跑一个不是拓扑的拓扑,看能不能完美匹配就可以了。
洛谷P5163 WD与地图
一坨屎。
经典套路是反过来做,这样删边就能变成加边,好做一点。
在线维护很难做,考虑离线。
对于两个强炼铜分量,可以用线段树维护信息,它们能变成一个分量时就做线段树合并。
于是可以对每条边算出它的两个端点所在的强炼铜分量合并的时间。容易发现这个东西具有单调性,于是考虑整体二分。
二分时,把出现时间小于等于 \(mid\) 的边加进去,跑一边塔尖就可以。注意加边的时候要加每个强炼铜分量的代表点,可以用并查集维护。
算完后直接边加边边查询。
洛谷P5610 [Ynoi2013] 大学
极度卡常的屎题。
不难发现一个数最多除 \(log_2\) 次就会变成 \(1\),于是考虑每次对 \(x\) 的倍数暴力除。
对每个数开一个 vector
存它的倍数的出现位置,每次二分一下。
考虑删数,用并查集维护被删的数。
vector
一定要用 emplace_back
,比 push_back
快不知道多少。
洛谷P5311 [Ynoi2011] 成都七中
洛谷 P5311 “[Ynoi2011] 成都七中”是一道典型的 Ynoi 系列高难度题目,其设计存在以下几点值得批判的地方:
- 思维跳跃性强,依赖冷门技巧。题目要求将原树问题转化为点分树上的二维偏序问题,并利用树状数组离线统计颜色。这一转化过程需要深刻理解点分树的性质(如连通块在点分树中的子树包含性),而这种技巧对普通选手而言极为冷门,缺乏普适性训练价值。 。
- 实现复杂度高,调试困难。代码涉及点分治建树、树剖求路径极值、离线扫描线、树状数组动态维护颜色等多个复杂模块,且各模块需紧密配合。例如,需通过树剖和ST表预处理路径极值以定位关键点,再结合点分树子树内的二维偏序处理,稍有不慎就会因边界条件或数据结构维护错误导致全盘皆崩135。
- 题意转化隐晦,直观性差。题目本质是求特定连通块的颜色种类数,但需通过“路径极值在区间内”间接描述连通性,导致问题建模与直观理解之间存在较大鸿沟。若不熟悉点分树的抽象性质,几乎无法找到正确方向。
时间卡常风险大。
尽管理论复杂度为 \(O(n \log_2 n)\),但实际实现中频繁的排序、离线操作和树状数组更新可能因常数问题超时,尤其是在多次清空数据结构时需格外谨慎,进一步增加实现压力。
总体来看,这道题更像是为了展示点分树和离线处理的技巧而设计的“炫技题”,缺乏对算法思维的系统考察,可能挫伤选手的解题信心,更适合作为研究性题目而非竞赛题。
洛谷P3332 [ZJOI2013] K大数查询
整体二分板子题。
\([l,r]\) 表示答案区间,\([ql,qr]\) 表示操作区间,每次把 \(c > mid=\lfloor\frac{l+r}{2}\rfloor\) 的修改加进去,查询直接处理。
考虑使用线段树区间加 \(1\) 区间查询维护。
洛谷P4602 [CTSC2018] 混合果汁
题目要求最小值的最大值,一眼二分。
将果汁按 \(d\) 从大到小排序,\(check(mid)\) 就是在前 \(mid\) 号果汁里贪心的选价格最小的,看体积能不能达到要求。
显然可以建 \(n\) 棵主席树。