DAY 3 数据结构 1.堆 Priority_queue 大根堆 Priority_queue<int , vector<int> , greater<int> > 小根堆 支持插入一个值,删除最大/最小值 它重载了运算符或函数类 堆排序 P1090 合并果子 哈夫曼树 2.LCA(最近公共祖先) ...
分类:
其他好文 时间:
2019-07-22 09:57:09
阅读次数:
128
题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [ ...
分类:
其他好文 时间:
2019-07-20 15:47:00
阅读次数:
112
若图片出锅请转至 "here" 概念 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节点。 所以LCA主要是用来处理当两个点 ...
分类:
编程语言 时间:
2019-07-06 21:00:58
阅读次数:
151
"题面" 题解 这里讲一种硬核做法。 首先$\mathrm{dfs}$整棵树,求出这棵树的欧拉序,然后$\mathrm{LCA}$问题就变成了$\pm 1\mathrm{RMQ}$问题。 考虑$\mathrm{O}(n)$解决$\pm 1\mathrm{RMQ}$问题。 将原序列分块,每一块长度为$ ...
分类:
其他好文 时间:
2019-07-06 13:32:50
阅读次数:
105
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */... ...
分类:
其他好文 时间:
2019-07-05 19:32:51
阅读次数:
98
lca的定义不在过多解释, 代码如下: 树上叉分:用于树上两点以及之间的路径上各个点点区间修改: 例如:(x,y)之间路径上的点都加一,可以将x++,y++,lca(x,y)--,fa[lca(x,y)]--;最后统计各个点的权值即可. ...
分类:
其他好文 时间:
2019-07-03 13:50:56
阅读次数:
94
"传送门" 解法: 首先要学会求 树的最近公共祖先(LCA) 没用树剖 用了一个经常可以代替树剖的方法 树上差分 ~~这个方法很优秀 一定要掌握~~ 首先 有了lca 就可以求树上两点间长度 设 $d[x]$ 为 $x$ 到 根节点 的距离 则 $u$,$v$ 间距离为 $d[u]+d[v] 2 d ...
分类:
其他好文 时间:
2019-07-01 21:46:15
阅读次数:
131
LCA(least common ancestors)最近公共祖先 指的就是对于一棵有根树,若结点z既是x的祖先,也是y的祖先(不要告诉我你不知道什么是祖先),那么z就是结点x和y的最近公共祖先。 定义到此。 那么怎么求LCA? 对于朴素思想,就是我要一步一步往上爬。。一步一步走。先把结点x和y整到 ...
分类:
其他好文 时间:
2019-07-01 19:57:13
阅读次数:
81
可以根据二叉搜索树的特点来进行解题: 二叉搜索树左边节点的值小于根节点 右边节点的值大于根节点。 所以左右都小于根节点的值说明在左子树上 左右的值大于根节点的值就代表值在右子树上 介于两者中间则输入的本身就是根节点,即为最近公共祖先。 一、遍历 二、递归 ...
分类:
其他好文 时间:
2019-06-23 19:13:16
阅读次数:
90
给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。最近公共祖先是两个节点的公共的祖先节点且具有最大深度。假设给出的两个节点都在树中存在。 dfs递归写法 查找两个node的最近公共祖先,分三种情况: 深度优先遍历二叉树,一旦找到了两个节点其中的一个,就将这个几点返回给上一层,上一层节点通过判断 ...
分类:
其他好文 时间:
2019-06-16 13:57:22
阅读次数:
107