前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图论——Tarjan 初步 DFS序+时间戳+欧拉序

图论——Tarjan 初步 DFS序+时间戳+欧拉序

作者头像
风骨散人Chiam
发布2020-10-28 10:22:45
7480
发布2020-10-28 10:22:45
举报
文章被收录于专栏:CSDN旧文

一、什么是DFS序:

DFS序是按照先序遍历,先遍历根节点然后依次遍历左子树,右子树的过程,每次遇到新的节点就把新访问节点加到序列中,代码如下:

代码语言:javascript
复制
int DFSrk[100000];
int cnt=0;
int dfs(int u,int fa)
{
    DFSrk[cnt++]=u;
    for(int i=head[u];i;i=ege[i].next)
    {
        if(ege[i].to!=fa)dfs(ege[i].to,u);
    }
}
//vector储存 如下
int dfs(int u,int fa)
{
    DFSrk[cnt++]=u;
    for(int i=0;i<ege[u];i++)
    {
        if(ege[u][i]=fa)dfs(ege[u][i],u);
    }
}

二、DFS序性质

我么会发现对于图中的三棵子树他们的DFS序连续:

A-B-C-D-E-F-G-H

B-C-D-E

F-G-H

也就是说在一棵子树上的DFS序,他们一定是连续的,那么我们可以做树上的差分,这里可以保留一下,稍后填坑。

一、什么是时间戳:

时间戳我们有两个标记第一个是第一次访问的时候记录一下,然后是在最后一次访问时再标记一下。 

二、时间戳的性质:

我们可以直接通过时间戳来判断一个节点是否是另一个节点的子节点。

一、什么是欧拉序:

欧拉是每次访问一个点到一个点,就要存一次,无论这个点之前访问过没有,就要遇见点就存。还有就是有的会认为叶节点也访问了两次则有如下欧拉序:A-B-C-C-B-D-E-E-D-B-A-F-G-G-F-A

主要用途是tarjan,用起来很舒服,比如求LCA,求LCA以上都可以使用其实。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档