题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入输出格式 输入格式: 第一行包含三个正整数N、M、S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来N-1行每行包含两个正整数x、y,表示x结点和y结点之间有一条直接连接的边(数据保证可以构成树)。 接下来M行 ...
分类:
其他好文 时间:
2017-07-29 19:40:55
阅读次数:
332
题意 第一行输入T,有T组数据。 对于每组数据,给出一棵树,先输入n,然后n-1行,每行两个数a,b,表示a是b的父亲;第n行输入两个数A,B表示询问A和B的最近公共祖先。 题解 LCA模板题。建议先学学LCA 有两种方法,分别是Tarjan和倍增,这里说一说倍增。LCA_倍增是LCA的在线算法,时 ...
分类:
其他好文 时间:
2017-07-29 16:40:15
阅读次数:
183
一、若二叉树为搜索二叉树 原题链接:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/#/description Given a binary search tree (BST), find th ...
分类:
其他好文 时间:
2017-07-27 15:54:31
阅读次数:
170
题意:给出 一颗树,然后q个询问,每个询问给出3个点,让我们自己选择一个起点一个终点,这条路线上的点标记,问第三个点到终点的最多标记点是多少 思路:第三个点到终点的标记点,肯定是第三个点与起点的最近公共祖先到终点的标记点。我们可以求出三个点的的三种最近公共祖先,取深度最大的点K,然后求K到三个点的距 ...
分类:
其他好文 时间:
2017-07-26 12:38:51
阅读次数:
111
一、梳理概念 定义:对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。 通俗地讲,最近公共祖先节点,就是两个节点在这棵树上深度最大的公共的祖先节点,即两个点在这棵树上距离最近的公共祖先节点。 提示:父亲节点也是祖先节点,节点本身也是 ...
分类:
编程语言 时间:
2017-07-26 01:38:27
阅读次数:
490
【在线】 1.倍增法 现将深度较大的跳至与深度较小的统一深度。预处理$fa[u][i]$表示$u$往上跳$2^i$个单位后的祖先,则就可以像快速幂一样,将移动的步数化为二进制,如果第$i$位为$1$,那么向上跳$2^i$次方,即$if(1 << i \& d) u = fa[u][i]$。跳至统一深 ...
分类:
其他好文 时间:
2017-07-26 00:02:53
阅读次数:
221
在线查询树上最近公共祖先 标准题目 第一行有2个整数n和q:n代表树的结点数量,q代表询问的次数接下来n-1行每行两个整数u和v,表示结点u到结点v有一条边。然后给出q组询问,每组询问由两个整数a和b构成,询问节点a和b的最近公共祖先。 样例数据 input:8 31 31 23 43 53 62 ...
分类:
其他好文 时间:
2017-07-23 20:57:51
阅读次数:
188
概念: 并查集是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的Kruskal 算法和求最近公共祖先等。 操作: 并查集的基本操作有两个: Merge(x, y):把元素x 和元素y 所在的集合合并,要求x 和y 所在的集合不相交,如果 ...
分类:
其他好文 时间:
2017-07-22 16:47:00
阅读次数:
183
P3379 【模板】最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入输出格式 输入格式: 第一行包含三个正整数N、M、S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来N-1行每行包含两个正整数x、y,表示x结点和y结点之间有一条直接 ...
分类:
其他好文 时间:
2017-07-22 14:25:58
阅读次数:
158