GJOI noip_csp训练赛1

posted on 2025-09-02 08:40:37 | under | source

战况

100 + 0 + 100 + 0 = 200。打了一个小时左右被抓走了。

A. 子集 subset

唐。

B. 彷徨 walk

图随机,只需每次松弛去除标记的点,这样势能分析复杂度就是松弛次数即最短路总长度,应该是根号级别的。

证明:图是基于一棵随机的树,那么最短路长度不超过直径,同时又有结论直径期望长度 \(O(\sqrt n)\)

C. 矩阵 mat

P10681 [COTS 2024] 奇偶矩阵 Tablica。之前某个神秘训练赛场切过,简单数数题。

显然枚举有多少列是 \(2\) 个的,然后考虑容斥,允许出现两个取在同一位置,这个不带限制容易 dp 计算。所以钦定一些不合法的,相当于扣掉一些行。然后是三次方的,但你发现根本没必要枚举列是 \(1\) 个还是 \(2\) 个,在 dp 时决定即可,同时乘上多重排列系数,就能平方了。

可能唯一难点就是这个容斥的方法?

D. 军队 army

P11945 [KTSC 2025] 军事基地 / safezone

fun fact:突然断网只截图了题面,然后一直在想线段树优化建图做法,最终得到了一个可持久化的单 \(\log\) 做法但恐怕常数巨大。

观察输出格式,已经明示并查集了。于是考虑对一维扫描线,问题就变成了:支持加入线段,并与此时与它相交的线段对应编号合并并查集;撤销线段。

放到线段树上,拆成 $\log $ 个点。显然有交的等价于存在两个点具有祖先后代关系。那么对于当前这些点的祖先只需在递归过程中合并即可。

然后是儿子,直接遍历子树显然不行,一个自然的想法是打个标记,然后在某个时刻让每个点再检查其祖先是否能与它合并。那么在该线段右端点时检查即可。

一个点上可能有多个标记,但你发现每次检查相当于取出加入位置 \(\ge\) 当前加入线段左端点的一段后缀,然后合并。所以只需保留位置最靠后(限制最松)的标记即可。\(O(n\log n)\)

启示:不能先入为主;看清楚题目所有信息,有可能暗示做法。

posted @ 2026-01-13 12:17  Zwi  阅读(0)  评论(0)    收藏  举报