Tricks
区间加入点,区间查询直线切点
建两棵线段树,第一棵将所有修改放在根到定位节点的路径上,查询时查询所有定位到的节点(不包括路径);第二棵将所有修改放在定位到的节点上,查询时查询定位的路径。
注意不能把两者都放到整条路径上,否则修改 和查询 都在根节点出现了……
树上维护所有儿子信息的方法
除了毛毛虫剖分,可以采取这样的树剖标号方式,先递归重儿子,再标所有轻儿子,再递归轻儿子,这样所有重链除了链顶连续,所有儿子除了重儿子连续:
树上当关键点距离 的时候连一条边,求连通块
“双向奔赴”技巧,每个点往外作半径为 的圆,则两个点距离 当且仅当这两个圆相交。
从所有关键点开始同时 bfs,每个点只需要被访问一次,后来的点直接合并即可。
树上倍增优化建图跑最短路优化至单 技巧
树上倍增优化建图的时候会建 个虚点,所以直接跑是 的。但是注意到这样建出来的图往往形如“一条链和一个点之间连边”,此时我们可以应用虚点技巧,改为新建一个虚点,连一条有权边和 条 边,然后跑最短路的时候,当访问一个点时,bfs
把它指出去的所有 边同时扔进优先队列。这样做的话,所有 id[i][u]
这样的倍增点都不会被扔进优先队列,精细实现(萌萌哒)可以使得虚点个数也是线性的,这样如果我们一共连了 条“链——点”边,就只有 个点被扔进过优先队列,时间复杂度 。
本文作者:CharlieVinnie
本文链接:https://www.cnblogs.com/Charlie-Vinnie/p/18075433
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步