初学dfs序

【定义】

dfs序是指:每个节点在dfs深度优先遍历中的进出栈的时间序列。

这张图的dfs序显然为A-B-D-E-G-C-F-H

【重要性质】

dfs序可以把一棵树区间化,即可以求出每个节点的管辖区间。

对于一棵树的dfs序而言,同一棵子树所对应的一定是dfs序中连续的一段。

这个性质非常重要,在利用dfs序来解题的过程中,这个不可缺少!

证明: 在dfs遍历时,当进入一个节点之后,dfs会先把当前的节点的所有子节点都遍历一遍,然后在回溯到当前节点,在这个过程中,它的所有子孙节点一定都被访问过了,而且在这之前,它的任何一个子孙节点都不可能被访问过。然后它才离开当前子树,回到父亲节点,再访问其他子树,所以同一子树的节点在dfs序中一定是连续的一段。

【代码模板】

void dfs(int x,int pre,int d){//L,R表示一个子树的范围
    L[x]=++tot;
    dep[x]=d;
    for(int i=0;i<e[x].size();i++){
        int y=e[x][i];
        if(y==pre)continue;
        dfs(y,x,d+1);
    }
    R[x]=tot;
}

【应用】

待续

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值