目录
- 2025 NOI 模拟 1
- A. 发光虫
- B. 跑步
- C. 梦
2025 NOI 模拟 1
A. 发光虫
二分答案 \(k\) 后用 2-SAT,相当于要让每个点向和它距离 \(<k\) 的不同色的点连边 .
对颜色分块,对于整块用线段树优化建图,散块暴力连边,容易发现时间复杂度为 \(\Theta((n\log n)^{1.5})\) .
B. 跑步
考虑到相当于求:
枚举 \(\lca(u,i)\) 的话就是:
这里后面只能保证 \(u\) 是 \(\lca(v,i)\) 的祖先,但是不取 \(u=\lca(v,i)\) 的情况一定不优,所以可以这样转换 .
在虚树上做,首先 \(\min\limits_{v\in S\cap\subtree(u)}\{\dep(v)\}\) 可以预处理出来,每一段都是一样的 . 如果一段被完整包含在 \(\anc(i)\) 里那么它对应的 \(u\) 一定是取最深的结点 . 那么在虚树上 DFS 倍增出来每段上 \(u\) 取当前段优的 \(i\) 和取前面的段优的 \(i\),把想求的东西全部树上差分维护一下就可以了 .
时间复杂度 \(O((n+\sum num_i)\log n)\) .
C. 梦
首先只需要计算每个点作为 \(\lca(u,v)\) 时的答案,然后取子树 max 即可 .
维护一下和每个点 \(u\) 深度差 \(d\) 的点中 \(b\) 或 \(c\) 的最大值,自底向上合并就可以了 . 长剖即可优化到 \(\Theta(nk)\) 并且过题 .
进一步可以通过维护 ST 表状物改成 \(\Theta(n\log k)\)(其实好像用单调队列就 \(\Theta(n)\) 了).