随笔分类 - 树论
快速求树中某个节点的k级祖先
摘要:问题如题目所示。 方法有很多,本文说三种: 树上倍增/LCA魔改 O(n logn) 预处理得到fa数组,倍增向上跳跃,求祖先即可。 int fa[N][21],dep[N]; void dfs_lca(int u,int father){ dep[u]=dep[father]+1; fa[u][0
树的DFS序
摘要:基础概念 树的DFS序列就是说: 树的每一个节点在DFS中进出栈的时间序列。 具体来说就是对树从根开始进行深搜,按搜到的时间顺序把所有节点排队。 就比如 上面这棵树,它的一个DFS序就是: 1 4 6 6 3 9 9 3 4 7 7 2 5 5 8 8 2 1 注意两点: 一棵树的DFS序不唯一。
二叉树
摘要:正常建树和遍历 先序遍历 void Pre(node *F){ if(!F)return; cout<<F->value; Pre(F->L); Pre(F->R); } 代码 /** *输入格式:ABC##DE#G##F### **/ #include<bits/stdc++.h> using n
最近公共祖先LCA 模板
摘要:前置知识 链式前向星 LCA问题简述 最近公共祖先简称 LCA (Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 为了方便,我们记某点集的最近公共祖先为 $LCA(v_1,v_2,...,v