题意:一个村子有n个房子,他们用n-1条路连接起来,每两个房子之间的距离为w,有m次询问,每次询问房子a,b之间的距离是多少。
分析:最近公共祖先问题,建一棵树,求出每一点i到树根的距离d[i],每次询问a,b之间的距离=d[a]+d[b]-2*d[LCA(a,b)];LCA(a,b)是a,b的最近公共祖先。
#pragma comment(linker, "/STACK:1024000000...
分类:
编程语言 时间:
2015-06-29 14:52:31
阅读次数:
164
//二叉树学习过程中的问题和代码集合//按先序序列创建二叉树//树的高度//求树的结点数//求二叉树第K层的节点个数//求二叉树中叶子节点的个数//求二叉树中节点的最大距离//两结点最低公共祖先//判断二叉树是不是平衡二叉树//释放树空间//感谢:http://blog.csdn.net/lucky...
分类:
其他好文 时间:
2015-06-28 14:09:11
阅读次数:
183
POJ 1330 Nearest Common Ancestors (LCA 求两个点的最近公共祖先)...
分类:
其他好文 时间:
2015-06-25 19:42:17
阅读次数:
197
一、什么是LCA?LCA:Least Common Ancestors(最近公共祖先),对于一棵有根树T的任意两个节点u,v,求出LCA(T, u, v),即离跟最远的节点x,使得x同时是u和v的祖先。二、算法分类 求LCA的算法很多,按照是否在线可以分为在线算法和离线算法。在线算法:用比较长的时....
分类:
其他好文 时间:
2015-06-17 23:01:10
阅读次数:
116
给定二叉查找树中的两个节点,求它们的最近公共祖先(Lowest Common Ancestor - LCA)。
在详细介绍之前,可以先参考下这篇文章"二叉树(70) - 最近公共祖先[1]"
函数原型定义如下:
Node *getLCA(Node* root, int n1, int n2)
其中n1和n2是指定的两个节点值。
例如, 上述BST中,10和1...
分类:
其他好文 时间:
2015-06-16 01:22:54
阅读次数:
201
6.7可怕的一周从BC开始。hdu5265pog loves szh II只是想写一个二分。然被骇。错误还不止一个。1.没用LL2.ans初值赋错Aguin第三题是一个 最近公共祖先后来反正写不出来了。就去学习了一下。理解能力差。看了好几篇没懂。后来看到一篇不怎么长的但是很直观。Link:http:...
分类:
其他好文 时间:
2015-06-14 00:21:12
阅读次数:
122
题意:给一棵树,求节点L,L+1,...R的最近公共祖先思路:先对树dfs一下,从根1出发,经过每条边时记录一下终点和到达这个点的时间截,令r[u]表示到达u这个节点的最早时间截,t[x]表示在时间截x时到达的节点编号,假设对于两个节点u,v,设r[u]#include#include#includ...
分类:
其他好文 时间:
2015-06-12 20:42:56
阅读次数:
104
题意:给出一棵树,1为根节点,求一段区间内所有点的最近公共祖先。解法:用一棵线段树维护区间LCA。LCA是dp做法。dp[i][j]表示点i的第2^j个祖先是谁,转移方程为dp[i][j] = dp[dp[i][j - 1]][j - 1],初始的dp[i][0]可以用一次dfs求得,这样可以用lo...
分类:
其他好文 时间:
2015-06-09 15:40:44
阅读次数:
121
题目地址:HDU 5266
这题用转RMQ求LCA的方法来做的非常简单,只需要找到l-r区间内的dfs序最大的和最小的就可以,那么用线段树或者RMQ维护一下区间最值就可以了。然后就是找dfs序最大的点和dfs序最小的点的最近公共祖先了。
代码如下:#include
#include
#include
#include ...
分类:
其他好文 时间:
2015-06-08 14:59:13
阅读次数:
133
poj1330-Nearest Common Ancestors
训练暑期课面向全球招生,欲报名从速!
Language:
Default
Nearest Common Ancestors
Time Limit: 1000MS
Memory Limit: 10000K
Total Submissions: 20814
...
分类:
其他好文 时间:
2015-06-01 09:45:03
阅读次数:
137