还是LCA-tarjan算法,跟POJ 1330做法基本类似,只是这个题目要求输出两个点的最短距离,其实利用LCA的性质,就是 两个点分别到最近公共祖先的距离之和一开始本来想用并查集把路径长度给找出来,但是不太好处理,原因是我刚好找到的这个点还没有加入到并查集中,(因为还没回溯上去),如果马上就合并...
分类:
其他好文 时间:
2014-08-10 18:06:30
阅读次数:
274
题意:求两个点的最近公共祖先。
1A#include
#include
#include
#include
#define maxn 100010
using namespace std;
int fa[maxn],lev[maxn],pre[maxn],c1,c2;
vector son[maxn];
bool dfs(int rt,int obj)
{
for(int i...
分类:
其他好文 时间:
2014-08-10 15:42:40
阅读次数:
261
题意要求一棵树上,两个点的最近公共祖先 即LCA现学了一下LCA-Tarjan算法,还挺好理解的,这是个离线的算法,先把询问存贮起来,在一遍dfs过程中,找到了对应的询问点,即可输出原理用了并查集和dfs染色,先dfs到底层开始往上回溯,边并查集合并 一边染色,这样只要询问的两个点均被染色了,就可以...
分类:
其他好文 时间:
2014-08-10 15:39:20
阅读次数:
215
基本概念LCA:树上的最近公共祖先,对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。RMQ:区间最小值查询问题。对于长度为n的数列A,回答若干询问RMQ(A,i,j),返回数列A中下标在[i,j]里的最小值下标。朴素LCA算法求出...
分类:
其他好文 时间:
2014-08-08 17:36:16
阅读次数:
226
先给个LCA模板HDU 1330(LCA模板)#include #include #define N 40005struct Edge{ int x,y,d,ne;};Edge e[N*2],e2[N*2];int be[N],be2[N],all,all2,n,m;bool vis[N];i...
分类:
其他好文 时间:
2014-08-06 21:57:33
阅读次数:
335
一 基础知识梳理:并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。使用并查集时,首先会存在一组...
分类:
其他好文 时间:
2014-07-27 22:19:59
阅读次数:
323
并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。
使用并查集时,首先会存在一组不相交的动态集合 S={S1,S2,?,Sk},一般都会使用一个整数表示集合中的一个元素。
每个集合可能包含一个...
分类:
其他好文 时间:
2014-07-19 23:23:29
阅读次数:
378
题目来源:POJ 1986 Distance Queries
题意:给你一颗树 q次询问 每次询问你两点之间的距离
思路:对于2点 u v dis(u,v) = dis(root,u) + dis(root,v) - 2*dis(roor,LCA(u,v)) 求最近公共祖先和dis数组
#include
#include
#include
using namespace std;
co...
分类:
其他好文 时间:
2014-07-10 23:50:17
阅读次数:
326
并查集能做什么? 1.连接两个对象; 2.查询两个对象是否在一个集合中,或者说两个对象是否是连接在一起的。 并查集有什么应用? 1. Percolation问题、 2. 无向图连通子图个数 3. 最近公共祖先问题 4. Kruskal最小生成树 5. 社交网络 等等 并查集数据结构: 并查集是一种树...
分类:
其他好文 时间:
2014-07-09 14:13:20
阅读次数:
214
LCA tarjan 的离线算法
#include
#include
#include
using namespace std;
const int maxn = 40010;
int first[maxn], head[maxn], cnt, sum;
struct edge
{
int u, v, w, next;
}e[maxn*2], qe[maxn], Q[maxn];
int...
分类:
其他好文 时间:
2014-07-09 10:23:35
阅读次数:
256