图论——Tarjan 初步 DFS序+时间戳+欧拉序
一、什么是DFS序:
DFS序是按照先序遍历,先遍历根节点然后依次遍历左子树,右子树的过程,每次遇到新的节点就把新访问节点加到序列中,代码如下:
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以上都可以使用其实。
图论——Tarjan 初步 DFS序+时间戳+欧拉序的更多相关文章
- dfs序和欧拉序
生命不息,学习不止,昨天学了两个算法,总结一下,然而只是略懂,请路过的大佬多多谅解. 一.dfs序 1.什么是dfs序? 其实完全可以从字面意义上理解,dfs序就是指一棵树被dfs时所经过的节点的 ...
- LCA-RMQ+欧拉序
还是那一道洛谷的板子题来说吧 传送门 其实好几天之前就写了 结果dr实在是太弱了 没有那么多的精力 于是就一直咕咕咕了 哎 今天终于补上来了 LCA概念传送门 RMQ传送门 这个算法是基于RMQ和欧拉 ...
- Underground Lab CodeForces - 782E (欧拉序)
大意:$n$结点,$m$条边无向图, 有$k$个人, 每个人最多走$\left\lceil\frac {2n}{k}\right\rceil$步, 求一种方案使得$k$个人走遍所有的点 $n$结点树的 ...
- dfs 序 欧拉序
推荐博客 :https://www.cnblogs.com/stxy-ferryman/p/7741970.html DFS序其实就是一棵树顺次访问的结点的顺序,例如下面这棵树 它的 dfs 序就是 ...
- lca 欧拉序+rmq(st) 欧拉序+rmq(线段树) 离线dfs 倍增
https://www.luogu.org/problemnew/show/P3379 1.欧拉序+rmq(st) /* 在这里,对于一个数,选择最左边的 选择任意一个都可以,[left_index, ...
- 树的遍历顺序 - dfs序|欧拉序|dfn序(备忘)
(仅作备忘) dfs序是dfs过程中对于某节点进入这个节点的子树和离开子树的顺序 满足每个节点都会在dfs序上出现恰好两次 任意子树的dfs序都是连续的 欧拉序是dfs过程中经过节点的顺序 每个节点至 ...
- 【BZOJ 3772】精神污染 主席树+欧拉序
这道题的内存…………………真·精神污染……….. 这道题的思路很明了,我们就是要找每一个路径包含了多少其他路径那么就是找,有多少路径的左右端点都在这条路径上,对于每一条路径,我们随便选定一个端点作为第 ...
- [BZOJ3772]精神污染 主席树上树+欧拉序
3772: 精神污染 Time Limit: 10 Sec Memory Limit: 64 MB Description 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位 ...
- Bzoj 2286 & Luogu P2495 消耗战(LCA+虚树+欧拉序)
题面 洛谷 Bzoj 题解 很容易想到$O(nk)$的树形$dp$吧,设$f[i]$表示处理完这$i$颗子树的最小花费,同时再设一个$mi[i]$表示$i$到根节点$1$路径上的距离最小值.于是有: ...
随机推荐
- flask-script的基本使用
Flask-Script flask-script的作用是可以通过命令行的形式来操作Flask.例如通过命令跑一个开发的服务器.设置数据库等. 命令的添加方式 1 .使用manage.command: ...
- node+express+mysql实现简单的数据增删改查
前提 电脑已经安装了node,express,mysql. 实现步骤 1.新建数据库表 附数据表结构: 2.创建exprss项目 express -e myapp 新建一个以ejs为模板的expre ...
- 19cRAC增删节点
由于测试环境打19c补丁失败,导致节点2 d2 crs无法启动!打补丁没有有效备份,亲人两行泪 先删再加节点. 一.删除节点 1.1 删除实例 参考 https://www.cnblogs.com/ ...
- tf.nn.softmax 分类
tf.nn.softmax(logits,axis=None,name=None,dim=None) 参数: logits:一个非空的Tensor.必须是下列类型之一:half, float32,fl ...
- 智能指针 unique_ptr
unique_ptr 不共享它的指针.它无法复制到其他 unique_ptr,无法通过值传递到函数,也无法用于需要副本的任何标准模板库 (STL) 算法. 1.不能进行复制构造和赋值操作(unique ...
- Docker系列-文章汇总
本篇汇总docker系列的文章目录: 01. 准备Docker环境 02. CentOS安装Docker 03. Bridge Network 01 容器间通信 持续更新中…… 本人微信公众号同步更新 ...
- 使用snapjs实现svg路径描边动画
一,snap.svg插件在近几天,突然接到一个需求,内容是要在网页上写一个路径的动画,还需要可以随意控制动画的速度,开始于结束,本来是一个图片可以解决的问题,结果就这样变难了呀,在网上查一会之后,突然 ...
- 遇到自己喜欢的视频无法下载,python帮你解决
问题描述 python是一种非常好用的爬虫工具.对于大多数的爬虫小白来说,python是更加简洁,高效的代码.今天就用实际案例讲解如何爬取动态的网站视频. 环境配置:python3:爬虫库reques ...
- Windows Pains poj 2585
Boudreaux likes to multitask, especially when it comes to using his computer. Never satisfied with j ...
- google protobuf c++ 反射
const Descriptor *desc = DescriptorPool::generated_pool()->FindMessageTypeByName(msg_name); asser ...