引用题解:http://blog.csdn.net/popoqqq/article/details/38823457题目大意:给出一个n个节点的有根树(编号为0到n-1,根节点为0)。一个点的深度定义为这个节点到根的距离+1。设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先。有...
分类:
其他好文 时间:
2015-03-18 07:46:44
阅读次数:
149
http://acm.hdu.edu.cn/showproblem.php?pid=2586给定一棵带权有根树,对于m个查询(u,v),求得u到v之间的最短距离那么只要求得LCA(u,v),dis(u,v)=dis[u]+dis[v]-2*dis[LCA(u,v)],其中dis[i]表示节点i到根节点root的距离31MS 4104K 2186 B#include
#i...
分类:
其他好文 时间:
2015-03-14 13:56:04
阅读次数:
136
http://poj.org/problem?id=1330给一个有根树,一个查询节点(u,v)的最近公共祖先836K 16MS#include
#include
#include
#include
#include
#include
#include
#include<map...
分类:
其他好文 时间:
2015-03-13 12:43:43
阅读次数:
114
题目连接http://hihocoder.com/problemset/problem/1067题目大意就是一棵树求任意两个节点的最近公共祖先。算法描述在题目的提示里面有比较详细的解释。这里就不多说了。这种算法的时间复杂度是O(n+q)。
在算法的实现上也有一些技巧,在参考了一些代码后写了一个比较精简的Trajan_LAC算法。#include
using name...
分类:
其他好文 时间:
2015-03-09 14:30:48
阅读次数:
132
裸题,树状数组区间修改+单点查询。当然要稍微讨论一下链的左右端点是否修改的情况咯。#include#include#includeusing namespace std;#define N 300001int en,v[Nsiz[son[U]]) son[U]=v[i]; ...
分类:
编程语言 时间:
2015-03-09 14:26:55
阅读次数:
142
裸题,但是因为权在边上,所以要先把边权放到这条边的子节点上,然后进行链更新/查询的时候不能更新/查询其lca。#include#include#includeusing namespace std;#define N 100001#define BN 320#define INF 214748364...
分类:
其他好文 时间:
2015-03-08 18:46:58
阅读次数:
460
T组数据,每组数据给出N个点和N-1条边,每条边先给出父结点,最后一行查询一对结点,输出它们的最近公共祖先。...
分类:
其他好文 时间:
2015-03-07 14:08:58
阅读次数:
169
1.题目描述:点击打开链接
2.解题思路:本题让我长见识了。也学到了很多新的知识:LCA,多级祖先算法。如果只是单纯地将无根树转化为有根树,找到u,v的中点,再用BFS计算中线上结点的个数,那么最终会导致TLE。本题的高效算法如下:
首先求出以1为根的树的所有结点的总个数,保存在num数组中,再利用LCA算法求出u,v的公共祖先,设为LCA。找到u,v结点的中点mid.此时规定deep...
分类:
其他好文 时间:
2015-03-02 09:37:41
阅读次数:
120
原理讲解:http://dongxicheng.org/structure/lca-rmq/
在线算法模板:
/**
LCA在线算法O(nlogn)
主函数调用:
init();
tot=0,dir[1]=0;
dfs(1,1);
ST(2*n-1);
int lca=LCA(u,v);
*/
#include
#include
#include
#include
#inclu...
分类:
编程语言 时间:
2015-03-01 18:33:50
阅读次数:
168
转自http://www.cnblogs.com/whatbeg/p/3765624.html首先将原图中的连通分量缩点,一定可以将原图缩成一棵树的形式,然后统计这棵树的叶子节点个数,答案就是(leaf+1)/2。这里不再证明,可以画个图看一下。(简单说明一下,首先把两个最近公共祖先最远的两个叶节点...
分类:
其他好文 时间:
2015-02-28 18:35:47
阅读次数:
207