【板子】欧拉序

树转区间:DFS 欧拉序(in /out 时间戳)

树的子树对应一段连续区间,是线段树能处理的核心前提:

  1. 定义 in[u]:第一次访问节点 u 的时间戳;
  2. 定义 out[u]:遍历完 u 整棵子树离开时的时间戳;
  3. 所有属于 u 子树的节点,它们的 in 编号一定落在区间 \(in\[u, outu]\)。

举个例子:

复制代码
1
├─2
└─3

dfs 序:1 → 2 → 回溯 → 3 → 回溯 \(in1=1,\ out1=3\) \(in2=2,\ out2=2\) \(in3=3,\ out3=3\) 子树 1 对应区间 \(1,3\),子树 2 对应 \(2,2\)。

DFS 预处理代码片段

复制代码
int tim=0;
double w[300005]; // w[u] = ln(节点u当前权值)
int in[300005],out[300005];
vector<int>g[300005];

void dfs(int u,int fa){
    in[u]=++tim;
    for(int v:g[u]){
        if(v!=fa) dfs(v,u);
    }
    out[u]=tim;
}
相关推荐
不负岁月无痕1 小时前
STL -- C++ 红黑树封装 Map 和 Set
java·c语言·开发语言·c++·面试
大耳朵糊涂1 小时前
链表的基础操作(二)
算法
山峰哥1 小时前
‌Explain实战:打开数据库执行计划的黑盒‌
大数据·服务器·数据库·sql·深度优先·宽度优先
拂拉氏1 小时前
【知识讲解】 红黑树的删除讲解
数据结构·算法·红黑树
初学者,亦行者1 小时前
算法设计与分析:动态规划 - TSP问题和0-1背包问题
c++·算法·动态规划
ward RINL1 小时前
# GPT-5.6-sol vs GPT-5.5 新题实测:非弹性碰撞物理题和稳定路由算法
网络·gpt·算法
灯澜忆梦1 小时前
【dp_1】爬楼梯 | 斐波那契数 | 第 N 个泰波那契数 | 三步问题
算法·golang
十五年专注C++开发2 小时前
C++之std::numeric_limits介绍
开发语言·c++·limits