原理讲解: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://acm.hdu.edu.cn/showproblem.php?pid=2586
Problem Description
There are n houses in the village and some bidirectional roads connecting them. Every day peole always like to ask like this ...
分类:
编程语言 时间:
2015-03-01 11:59:18
阅读次数:
710
Description:
In the figure, each node is labeled with an integer from {1, 2,...,16}. Node 8 is the root of the tree. Node x is an ancestor of node y if node x is in the path between the root and node...
分类:
编程语言 时间:
2015-02-25 14:18:40
阅读次数:
191
tarjan算法是处理最近公共祖先问题的一种离线算法。算法思路:先将所有的询问搜集起来。然后对树进行dfs,在dfs的过程中对节点进行着色。当到达某个节点x的时候,给x着色为灰色,离开x的时候,着色为黑色。当到达x并将其着色为灰色后,处理与x相关联的所有询问:(这里有一个显然的事实:所有的灰色节点都...
分类:
编程语言 时间:
2015-02-21 14:19:52
阅读次数:
222
求一个区间内不同数的和。这相当于求一个区间的不同数的个数。使用树状数组,离线算法,离散化,把所有要询问的区间读入,然后按区间的右端点排序。对数组从左往右扫描,设当前数字为V,记录下V上一次出现在数组的位置last[V],然后把上一次的位置last[v]在树状数组减去V,在当前位置加上V。当扫描到区间...
分类:
其他好文 时间:
2015-02-04 14:12:17
阅读次数:
246
题意:给定一棵树,查询时给定两个点,求出两个点的距离。
暴力做肯定超时的。我的做法是采用lca(最近公共祖先)的离线算法,即tarjan算法(据说Tarjan提出了很多算法,可能还有很多tarjan算法),算法里用到了并查集。在输入完所有查询之后,在求出答案。tarjan算法的做法是:一开始vis数组初始化为0,从树根开始递归往下对点进行染色,刚到一个点的时候将vis取为-1,在继续递归...
分类:
编程语言 时间:
2015-01-24 09:02:19
阅读次数:
260
题目大意:给你一棵树,有N个结点,N-1条边。最后询问距离树上两个点(u,v)最近的
公共祖先是多少。
比如上图:6和16的最近公共祖先就是4;14和1的最近公共祖先就是1。
思路:对于最近公共祖先LCA问题,最经典的离线算法是Tarjan-LCA算法。用链式前向
星存储图和询问,Head[]和Edges[]表示图(树),QHead[]和QEdges[]表示询问。集合
的操作用并查集实现。这道题里用了indegree[]数组来存储结点的入度,找到入度为0的
根结点root,调用LCA(root)。
Tarj...
分类:
编程语言 时间:
2014-12-31 21:35:07
阅读次数:
161
题目链接:BZOJ - 1878题目分析题目的询问是某个区间内的颜色种类数,所以我们希望这个区间内的每种颜色只被计数一次,那么我们就选取询问区间内的每种颜色第一次出现的元素计数,之后再出现已经在询问区间中出现过的颜色就不再计数。考虑一种离线算法,如果我们将所有询问按照询问区间的左端点排序,那么所有询...
分类:
其他好文 时间:
2014-12-18 23:35:56
阅读次数:
208
很好的参考资料:http://taop.marchtea.com/04.04.html 下面的配图和部分文字转载于此文章
离线算法就是指统一输入后再统一输出,而不是边输入边实时输出。Tarjan算法的复杂度为O(N+Q),Q为询问的次数.
由于是离线算法,所以要保存输入的信息,次序问题。
若两个结点u、v分别分布于某节点t 的左右子树,那么此节点 t即为u和v的最近公共祖先。更进...
分类:
编程语言 时间:
2014-12-09 21:27:58
阅读次数:
366
tarjan求lca离线算法的简洁模板,树用孩子兄弟表示法表示,代码很短。...
分类:
其他好文 时间:
2014-11-25 16:27:13
阅读次数:
258