P3379 【模板】最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入输出格式 输入格式: 第一行包含三个正整数N、M、S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来N-1行每行包含两个正整数x、y,表示x结点和y结点之间有一条直接 ...
分类:
其他好文 时间:
2017-06-04 21:10:07
阅读次数:
198
如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入格式: 第一行包含三个正整数N、M、S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来N-1行每行包含两个正整数x、y,表示x结点和y结点之间有一条直接连接的边(数据保证可以构成树)。 接下来M行每行包含两个正整数a、b ...
分类:
其他好文 时间:
2017-05-31 21:30:57
阅读次数:
234
原文传送门orzJVxie Tarjan(离线)算法的基本思路及其算法实现 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节 ...
分类:
其他好文 时间:
2017-05-31 21:29:39
阅读次数:
250
hiho1067 题目链接 问树上两个点的最近公共祖先 第一次写所谓的离线算法,不是来一个询问就处理一下,而是在扫描树的过程中每扫到一个点就处理和这个点相关的询问。 因为这个点的祖先肯定都访问过一次了,且所有标记为1的点都是这个点的祖先 第一次扫到这个点时标记为1,扫完这个点的所有子节点后标记为2; ...
分类:
其他好文 时间:
2017-05-27 19:18:16
阅读次数:
161
对二叉查找树找到两个节点的最小公共祖先:可以根据二叉查找树的性质:左子树的节点值比根节点的值小,右子树的节点值比根节点值大 以下是二叉树节点的类的定义 ...
分类:
其他好文 时间:
2017-05-24 19:20:48
阅读次数:
166
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 Problem Description There are n houses in the village and some bidirectional roads connecting them ...
分类:
其他好文 时间:
2017-05-21 09:59:42
阅读次数:
242
LCA目前比较流行的算法主要有tarjian,倍增和树链剖分 1)tarjian 是一种离线算法,需要提前知道所有询问对 算法如下 1.读入所有询问对(u,v),并建好树(建议邻接表) 2.初始化每个节点各属一个并查集,都指向自己 3.对整棵树进行dfs(深度优先搜索)遍历 每处理到一个新节点(u) ...
分类:
其他好文 时间:
2017-05-19 18:40:44
阅读次数:
315
P3379 【模板】最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入输出格式 输入格式: 第一行包含三个正整数N、M、S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来N-1行每行包含两个正整数x、y,表示x结点和y结点之间有一条直接 ...
分类:
其他好文 时间:
2017-05-18 11:38:07
阅读次数:
224
二叉树的最低公共祖先 代码(C)本文地址: http://blog.csdn.net/caroline_wendy二叉树的最低公共祖先(lowest common ancestor), 首先先序遍历找到两个结点的路径, 然后依据链表路径找到最低的公共祖先.代码:/* * main.cpp * * C ...
分类:
编程语言 时间:
2017-05-17 20:55:08
阅读次数:
219
tarjian算法 LCA: LCA(Least Common Ancestor),顾名思义,是指在一棵树中,距离两个点最近的两者的公共节点。也就是说,在两个点通往根的道路上,肯定会有公共的节点,我们就是要求找到公共的节点中,深度尽量深的点。还可以表示成另一种说法,就是如果把树看成是一个图,这找到这 ...
分类:
编程语言 时间:
2017-05-14 16:07:23
阅读次数:
161