dfs序和欧拉序

dfs序

关于 d f s dfs dfs序是访问一棵树时将其按照 d f s dfs dfs时访问的先后顺序打上序号,一般维护两个数组in和out,用一个id表示时间节点,每次进来一个新的节点则 i n [ u ] = + + i d in[u]=++id in[u]=++id,出去时 o u t [ u ] = i d out[u]=id out[u]=id,当某个结点回溯回来并且没其它结点这个结点的出时间戳一定和最后一个子树的最后一个访问结点的出时间戳一样。于是,通过 O ( n ) O(n) O(n)的扫一遍树上的每个点就可以把非线性的树形结构转成线性的区间结构。

d f s dfs dfs序能够把树上的问题转化为区间问题,用像线段树等维护区间的数据结构来对树上进行询问、更新

图解

在这里插入图片描述
Ps:图来源

性质

u结点包含v结点(或称u结点是v结点的祖先)当且仅当v的时间戳介于u的时间戳之间,即 i n [ u ] &lt; i n [ v ] 且 o u t [ u ] &gt; = o u t [ v ] in[u]&lt;in[v]且out[u]&gt;=out[v] in[u]<in[v]out[u]>=out[v];或者当且仅当v的序列是u序列中连续的一段。
注:seq[in[u]]=u(映射关系)

实现:

int in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胡同的诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值