“没有三角不等式时,跳过重复顶点可能显著增重,近似界失效;一般非 metric TSP 甚至难以获得此保证。$T\cup M$ 是允许平行边的多重图,不能去重。这里的 Eulerian gra…”
三种序列 ​
深度优先搜索的 preorder 让每节点出现一次;记录 (tin,tout) 后,
DFS 返回前会完整处理孩子子树,因此子树连续。Entry/exit 序列每节点两次,适合进入加、退出减;完整 Euler walk 每条边走两次,长
真例 ​
根 1 的孩子为 2、3,2 的孩子为 4、5。preorder ((1,2,4,5,3)) 中子树 2 是半开区间 ([1,4));数组区间加便等价于子树加。完整 walk 含返回的父节点,不能套同一端点。
无根树须先选根;换根改变祖先关系,link/cut 会破坏静态次序。动态 Euler-tour tree 是维护序列的数据结构,不是一次 DFS 数组。
对子树和可令扁平数组 (\operatorname{flat}[tin(v)]=weight(v));任意路径通常还需 LCA 或重链分解,不能硬写成一个 preorder 区间。完整 Euler walk 中节点多次出现,LCA 归约要固定首次位置;混用 preorder 下标与 walk 下标会产生真实错答。
对该树,4 与 3 的首次出现区间中最浅节点为 1,故 LCA 为 1;4 与 5 的对应区间最浅节点为 2。若使用 preorder 深度,回退父节点的记录消失,RMQ 归约会错。
三种序列的生成过程 ​
DFS 进入
例树完整 walk
子树与路径的数组化 ​
令 flat
任意
静态失效构造 ​
在根 1 下原有子树 2 的区间连续;执行 cut
参考资料
- Cormen et al., Introduction to Algorithms, DFS timestamps.
- Bender, Farach-Colton, “The LCA Problem Revisited,” 2000.