一、什么是LCA?LCA:Least Common Ancestors(最近公共祖先),对于一棵有根树T的任意两个节点u,v,求出LCA(T, u, v),即离跟最远的节点x,使得x同时是u和v的祖先。二、算法分类 求LCA的算法很多,按照是否在线可以分为在线算法和离线算法。在线算法:用比较长的时....
分类:
其他好文 时间:
2015-06-17 23:01:10
阅读次数:
116
题意:城市道路没有环不一定连通的树求两城市的最短距离 设想一下就是很多小树那好办思路:lca离线算法然后有个技巧就是每次我们tarjan一棵树不是最后树的节点都访问过并且孩子全能找到根嘛那么我们只要做做做做做到全部的城市都访问过了就行了反正你做这颗小树的时候又不会影响到其他树的#include #i...
分类:
其他好文 时间:
2015-06-14 21:22:33
阅读次数:
112
题意:3种操作分别为入队,出队,查询当前队列的中位数。操作数为1e5数量级。思路:先考虑离线算法,可以离散+线段树,可以划分树,考虑在线算法,则有treap名次树,SBtree(size balanced tree)等等。123456789101112131415161718192021222324...
分类:
其他好文 时间:
2015-06-03 06:07:22
阅读次数:
201
Nearest Common AncestorsTime Limit: 1000MSMemory Limit: 10000KTotal Submissions: 20715Accepted: 10910DescriptionA rooted tree is a well-known data str...
分类:
编程语言 时间:
2015-05-22 13:17:34
阅读次数:
137
并查集的离线算法。题意是大坑。理解为寻找两点之间所有路径中的最长的边的值小于输入的值的点对的个数。直接来代码。#include#include#includeusing namespace std;struct ab{ int a,b,c;};int n;struct ab poi[50050...
分类:
其他好文 时间:
2015-05-20 22:10:40
阅读次数:
134
题目描述这次使用离线算法来解决最近公共祖先的问题。离线算法可以一遍 dfs 处理完所有的查询,因而需要把查询全部储存起来。具体的 dfs 过程是:所有节点最初标记为白色,第一次经过该节点时,将其染成灰色,第二次经过该节点时(即离开该节点时)将其染成黑色。在 dfs 的某个状态下,白色代表未访问的节点...
分类:
其他好文 时间:
2015-05-08 21:59:30
阅读次数:
119
最近研究了一下最近公共祖先算法,根据效率和实现方式不同可以分为基本算法、在线算法和离线算法。下面将结合hihocoder上的题目分别讲解这三种算法。1、基本算法 对于最近公共祖先问题,最容易想到的算法就是从根开始遍历到两个查询的节点,然后记录下这两条路径,两条路径中距离根节点最远的节点就是所要...
分类:
编程语言 时间:
2015-05-03 00:39:52
阅读次数:
262
最近做到一道题目,大概的意思就是求一个多叉树中两个节点的最近公共祖先,输入是用邻接矩阵表示的。要想理解tarjan算法并实现它,需要先理解一下内容:1) 深度优先搜索;tarjan算法核心思想:当某节点刚刚搜索完毕时,看与其相关的结点v是否已经被访问,如果v已经被访问过了,则它们的最近公共祖先就是v...
分类:
编程语言 时间:
2015-04-26 15:12:34
阅读次数:
138
题目链接:BZOJ - 3531题目分析题目询问一条路径上的信息时,每次询问有某种特定的文化的点。每个点的文化就相当于一种颜色,每次询问一条路径上某种颜色的点的信息。可以使用离线算法, 类似于“郁闷的小 J ” 那道题目。将各种操作和询问按照颜色为第一关键字,时间为第二关键字排序。那么修改颜色的操作...
分类:
其他好文 时间:
2015-04-25 22:33:15
阅读次数:
204
vector Q[N];int Find(int x)
{
if(x != fa[x]) return fa[x] = Find(fa[x]);
return x;
}void Union(int x, int y)
{
int fx = Find(x), fy = Find(y);
if(fy != fx) fa[fy] = fx;
}void dfs(...
分类:
编程语言 时间:
2015-03-07 14:09:36
阅读次数:
174