两种欧拉序的区别

适用于 O(1) LCA 的欧拉序

构造方法:dfs 初次访问节点的时候的时候加入欧拉序,从某个子树访问完之后再次将该节点加入欧拉序。

大小:初次会额外访问一次根节点,并且每条边都会给两个端点贡献一次,故为 2n1

性质:两个节点的 LCA 在欧拉序上处于两个节点之间(虽然一个点在欧拉序上有多个位置,但是任取一个位置这个性质都是成立的),且深度在区间内所有点中是最小的。

据此我们使用 ST 表维护区间(深度)最小值即可 O(1) LCA。当然 dfs 序也能

适用于树上莫队的欧拉序

又名括号序。

构造方法:dfs 初次访问时加入欧拉序,要往父亲回溯时再加入欧拉序。

大小:显然是 2n

性质:记 x 第一次访问的时间戳在 fstx,第二次在 lstx,设 dfnx<dfny,在 xy 的链上的点在欧拉序上的区间 [lstx,fsty] 中出现了一次,其他的点出现了两次或零次。特殊情况,当 lca(x,y)x 时,它们的 lca 没有出现,需要特判。

据此我们可以在处理树上链查询某些特殊问题时(可树上莫队/有两两抵消性质的信息,如异或),将树拍到欧拉序上去使用数据结构去维护。同时这玩意也可以求两点间的距离。

作者:dcytrl

出处:https://www.cnblogs.com/dcytrl/p/18464679

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   dcytrl  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示