dfs序

一、前置芝士

  • dfs(废话)

二、定义

考虑dfs序并没有公认的定义,所以此处给出个人理解,仅供参考:

dfs序是每个节点出栈(入栈、出入栈)的时间序列

注意:DFS序 不等于 欧拉序(欧拉序回溯时要记录而dfs序不用)


三、标序方式

考虑先给出dfs后的一棵树(dfs树)
原图

1.入栈顺序

即搜索到一个节点的顺序
入栈dfs序

2.出栈顺序

即退出一个节点的顺序
出栈dfs序

3.结合在一起

出入栈dfs序

我们假设一个点\(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)
  • 割点、桥、边双连通分量、点双连通分量
posted @ 2023-01-13 16:01  ricky_lin  阅读(20)  评论(0编辑  收藏  举报