dfs序和欧拉序】的更多相关文章

生命不息,学习不止,昨天学了两个算法,总结一下,然而只是略懂,请路过的大佬多多谅解.   一.dfs序 1.什么是dfs序? 其实完全可以从字面意义上理解,dfs序就是指一棵树被dfs时所经过的节点的顺序 原图来源于网络,并经过灵魂画师xhk的一发魔改.   好的,这张图的dfs序显然为A-B-D-E-G-C-F-H 2.dfs序怎么写? 首先你得会写dfs(不会的请先自行学习) 然后我们都知道正常的dfs一般是长这样的(以及博主是只蒟蒻) 我们只需要多一个辅助数组来记录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…
还是那一道洛谷的板子题来说吧 传送门 其实好几天之前就写了 结果dr实在是太弱了 没有那么多的精力 于是就一直咕咕咕了 哎 今天终于补上来了 LCA概念传送门 RMQ传送门 这个算法是基于RMQ和欧拉序的算法 什么是Rmq?   RMQ (Range Minimum/Maximum Query)问题是指: 对于长度为n的数列A, 回答若干询问RMQ(A,i,j)(i,j<=n), 返回数列A中下标在i,j里的最小(大)值, 也就是说,RMQ问题是指求区间最值的问题. 解决Rmq问题常用ST算法.…
大意:$n$结点,$m$条边无向图, 有$k$个人, 每个人最多走$\left\lceil\frac {2n}{k}\right\rceil$步, 求一种方案使得$k$个人走遍所有的点 $n$结点树的欧拉序长度为$2n-1$, 直接取$dfs$树的欧拉序即可 #include <iostream> #include <algorithm> #include <math.h> #include <cstdio> #include <vector>…
https://www.luogu.org/problemnew/show/P3379 1.欧拉序+rmq(st) /* 在这里,对于一个数,选择最左边的 选择任意一个都可以,[left_index,right_index],深度都大于等于这个数的深度 */ #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <time.h> #inc…
(仅作备忘) dfs序是dfs过程中对于某节点进入这个节点的子树和离开子树的顺序 满足每个节点都会在dfs序上出现恰好两次 任意子树的dfs序都是连续的 欧拉序是dfs过程中经过节点的顺序 每个节点至少出现一次(事实上出现这个节点的度次,根节点额外一次) 有时候用来配合稀疏表求最近公共祖先 dfn序是点按照dfs进入节点的顺序排列的序列 一般dfn序可以认为是dfs序的一半.是dfs序的子序列 以上三种序列实际应用的时候可以配合线段树等数据结构(例如dfs序中子树dfs序是连续的) 当然我并不是…
推荐博客 :https://www.cnblogs.com/stxy-ferryman/p/7741970.html DFS序其实就是一棵树顺次访问的结点的顺序,例如下面这棵树 它的 dfs 序就是 A-B-D-E-G-C-F-H int key = 0;void dfs(int x, int fa){ dfs_[cnt++] = x; s[x] = ++key; for(int i = 0 ; i < ve[x].size(); i++){ int to = ve[x][i]; if (to…
题面 洛谷 Bzoj 题解 很容易想到$O(nk)$的树形$dp$吧,设$f[i]$表示处理完这$i$颗子树的最小花费,同时再设一个$mi[i]$表示$i$到根节点$1$路径上的距离最小值.于是有: $ f[i]=\sum min(f[son[i]], mi[son[i]]) $ 这样就有$40$分了. 考虑优化:这里可以用虚树来优化,先把所有点按照$DFS$序进行排序,然后将相邻两个点的$LCA$以及$1$号点加入进$LCA$,然后虚树就构好了,考虑欧拉序的特殊性质,所以再还原出欧拉序,在上面…
这道题的内存…………………真·精神污染……….. 这道题的思路很明了,我们就是要找每一个路径包含了多少其他路径那么就是找,有多少路径的左右端点都在这条路径上,对于每一条路径,我们随便选定一个端点作为第一关键字,另一个作为第二关键字,于是就有了两维限制,按照主席树的一般思路,我们把建树顺序作为一维,然后在里面维护另一维,那么我们在外面限制第一关键字,就是在树上建主席树,查询减LCA,在里面的话我们把每个点作为第一关键字对应的第二关键字,放入主席树,而主席树维护的是欧拉序区间,所以我们每次查询只用查…
[BZOJ3611][Heoi2014]大工程 Description 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道.  我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上.  在 2 个国家 a,b 之间建一条新通道需要的代价为树上 a,b 的最短路径.  现在国家有很多个计划,每个计划都是这样,我们选中了 k 个点,然后在它们两两之间 新建 C(k,2)条 新通道. 现在对于每个计划,我们想知道:  1.这些新通道的代价和  2.这些新通道中代价最小的是多少 …