一、树的dfs序
1、思路
对数进行深度优先搜索时,对于每个节点,在刚进入递归后以及即将回溯前各记录一次该点的编号,最后产生的长度为2N的节点序列就为树的DFS序。——摘自算法竞赛进阶指南(李耀东)
2、性质
- 每个节点的编号出现两次,一次为L[x],R[x]L[x],R[x]L[x],R[x]。
- 闭区间[L[x],R[x]][L[x],R[x]][L[x],R[x]],就是以x为根的子树的DFS序。
3、Code
const int N = 1e5;
int a[N<<1],cnt = 0;//a记录dfs序
bool vis[N];
void dfs(int u){
a[++cnt] = u;
vis[x] = 1;
for(int i = head[u], ~i ;i = e[i].next){
int v = e[i].v;
if(vis[v]) continue;
dfs(v);
}
a[++cnt] = u;
}
二、树的深度
1、Code(自上而下)
const int N = 1e5;
int dis[N];

本文深入探讨了树的DFS序、深度、直径和重心的概念及其算法实现,详细介绍了树的各种特性和计算方法,如DFS序的生成、树的深度计算、树的直径求解以及树的重心确定。
最低0.47元/天 解锁文章
3106

被折叠的 条评论
为什么被折叠?



