【总结】学习记录(2025.2.17-3.2)
省选集训记录。
upd on 2.28:
完了,明天省选了,一点没写。
那就把复习到的一些关键点记在这里。
图论
-
Tarjan 求连通分量,强连通分量记得很熟了(模板)。
- 点双求割点,判断符号 \(\geq\),点双用边集表示。
- 边双求割边,判断符号 \(>\),边双用点集表示。
具体而言,割点属于多个点双,点双中的边只属于一个点双。割边不属于任何一个边双,每个点都属于唯一一个边双。
在具体题目中如何使用重点关注题目的要求在边还是在点(对应割点和割边),以及题目对于连通分量的定义是路径上点不重复还是边不重复(对应点双和边双)。 -
点分治。学了不久,理应复习。
核心思想:处理树上路径有关问题。
一个子树内的路径分为经过子树根和不经过子树根两种,经过根的路径可由两条根到某个节点的路径拼接。
对于一颗子树,从根节点遍历,记录下根节点到每个节点的路径信息,然后合并。合并过程中可能出现两点在同一个子树内,处理完根节点的答案后需要计算每个子树内节点两两合并的答案,减去不合法的答案。
为了保证时间复杂度,对每个子树,用重心作为子树根。
代码细节繁多,考前可多熟悉其中有关求重心的部分。 -
动态点分治(模板)。在点分治的基础上增加修改操作,一般针对点/边权。
核心思想:由于树的形态不改变,所以建出点分树,修改时需修改点在点分树上的祖先的信息。
数据结构
- 李超线段树模板。
- 核心思想:加入一条直线/线段,查询某个点的最优值。
对于线段树上的每个区间记录 \(mid\) 处的最优线段信息。加入一条线段与其比对,若在 \(mid\) 处更优则交换两条线段,并递归处理交点所在区间(左或右),若一条线段完全优于另一条则不递归。
通过此标记永久化思想,查询时算出所有经过的区间中的最优值即可。
若加入均为直线则时间复杂度 \(O(n\log n)\),若为线段则现需要在线段树上找到完全包含的区间,再对于每个区间修改,时间复杂度 \(O(n\log^2 n)\)。
线段的插入同样需要在线段树上找到完全包含的对应区间再修改。
李超线段树是小常 \(\log^2\),写的时候要注意精度问题,比较时加上 \(eps\)。
- 核心思想:加入一条直线/线段,查询某个点的最优值。
- 可持久化线段树模板。
- 平衡树,就不管了,才学了一天,省选就算用上了也调不出来。
- st 表的写法随便研究一下就行。某些不需要修改的情况下 st 表优于线段树和树状数组(注意信息需要可合并)。
- 线段树合并。断边逆操作,树形 dp 等情况可考虑。
- 分块。在某些时限看上去可行,并且信息很难用线段树一类的数据结构维护时可以考虑分块。代码相较线段树等更加灵活,细节更多,写时注意仔细。
- 哈希表。模板。
思想技巧
- 根号分治。没有思路的时候可以想想根号分治,有奇效。好题题解。
在时间复杂度允许的情况下可以带 \(\log\),因此设定块长时要注意两边时间复杂度差异(有条件也要注意常数),设定合适的块长。 - 离线思想。
- 询问离线,线段树+扫描线。
- 线段树分治(模板)。
核心思想:会撤销的修改,不好直接维护的信息(例如图上的信息)。
离线,记录下修改的开始与结束时间,以时间点为下标建立线段树,把修改的询问挂在线段树的区间节点上。其中需要用到可以维护撤销信息的数据结构(可撤销并查集等)。
总结
最后仍然没有复习完。
不过现在都结束了,也是开始下个阶段,继续学省选知识了。
至于集训记录嘛,只能先搁置了。学的很多杂七杂八的知识,只好留待以后再做总结了。
现在也是忙起来了呢,体训开始上强度了,中考也就在眼前,因为补课还有一大堆新知识没有怎么练题,集训时学的东西也没怎么练,只好之后慢慢补了。
不过晚上睡太晚会很难受。还是身体为重吧。
接下来一个月多一点,准备体育中考和竞赛上新课。接着就回去备战中考了。多的也不说了,中考加油!

浙公网安备 33010602011771号