![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础算法
dezhonger
这个作者很懒,什么都没留下…
展开
-
0x21 树与图的遍历
接下来是一些约定: 给定N个点的树或者图时,其节点编号为1~N,无向图中的边看做成对出现的双向边,树看成是具有N-1条边的无向图,它们的边都存储在一个连接表中,邻接表以head数组为表头,使用ver和edge数组分别存储边的终点和权值,使用next数组模拟链表指针,即链式前向星。 关于链式前向星,可参考另一篇文章https://blog.csdn.net/dezhonger/article/d...原创 2019-05-20 22:47:12 · 324 阅读 · 0 评论 -
0x13 链式前向星
简介:acm常用的一种存图的算法。 这里我抄下书: 在一个具有n个点m条边的有向图结构中,我们可以把每条边所属的"类别"定义为该边的起点序号,这样所有的边就被分为n类,其中第x类边由"起点是x点出发的边组成"。通过表头head[x],我们可以定位到第x类对应的链表,从而访问到从x出发的所有的边。 这里举个例子,我们有一个图,5个顶点,6条边 (1,2) ,(2,3) ,(2,5)...原创 2019-05-17 20:35:28 · 307 阅读 · 0 评论 -
0x61 树的直径与最近公共祖先(一)
1、树的直径: 树中最远两个节点之间的距离为树的直径,连接这两点的路径被称为树的最长链。 树的直径一般有两种求法,时间复杂度都是O(N). 我们假设树以N个点N-1条边的无向图形式给出,并存储在邻接表(链式前向星)中。 算法1:树形dp求树的直径 不妨设1号节点为根,设d[x]表示从节点x出发向以x为根的子树,能够到达的最远节点的距离。设x的t个子节点为y_1.y_2,....y...原创 2019-06-04 21:35:43 · 533 阅读 · 0 评论 -
0x61 树的直径与最近公共祖先(二)
最近公共祖先(LCA) LCA(x, y)是x和y的所有公共祖先中,深度最大的一个点。 算法1:向上标记法 从x向上走到根节点,标记走过的节点。y节点向上走到根节点,第一次遇到已经标记的节点,即为LCA(x, y) 算法2:树上倍增法 令f[x, k]表示x的2^k辈祖先,显然f[x, 0] 是x分父节点,若f[x, k]不存在,f[x, k] = 0. 除此除此之外...原创 2019-06-04 22:16:50 · 178 阅读 · 0 评论 -
0x61 树的直径与最近公共祖先 树上差分(三)
包括数组差分和树上差分 https://www.cnblogs.com/ice-wing/p/7709311.html https://rpdreamer.blog.luogu.org/ci-fen-and-shu-shang-ci-fen loj3128是树上对点差分的模板题 #include <vector> #include <list> ...原创 2019-06-04 23:20:25 · 126 阅读 · 0 评论