dfs序
一、前置芝士
- dfs(废话)
二、定义
考虑dfs序并没有公认的定义,所以此处给出个人理解,仅供参考:
dfs序是每个节点出栈(入栈、出入栈)的时间序列
注意:DFS序 不等于 欧拉序(欧拉序回溯时要记录而dfs序不用)
三、标序方式
考虑先给出dfs后的一棵树(dfs树)
1.入栈顺序
即搜索到一个节点的顺序
2.出栈顺序
即退出一个节点的顺序
3.结合在一起
我们假设一个点\(x\),\(tin_x\)表示点\(x\)的入栈时间,\(tout_x\)表示点\(x\)的出栈时间
由上图我们可以得到一个性质:
- 对于点\(u,v\),\(u\)为\(v\)的父节点,当且仅当 \(tin_u < tin_v 且 tout_v < tout_u\)。这个性质可以\(O(1)\)判断父子关系
详见 倍增求LCA(时间戳法)
三、用途
- 倍增求LCA
- 强连通分量(tarjan、Kosaraju)
- 割点、桥、边双连通分量、点双连通分量
本文来自博客园,作者:ricky_lin,转载请注明原文链接:https://www.cnblogs.com/rickylin/p/17049917.html