LCA_Tarjan LCA的Tarjan算法的时间复杂度为O(n+q)是一种离线算法,要用到并查集。Tarjan算法基于dfs,在dfs的过程中,对于每个节点位置的询问做出相应的回答。dfs的过程中,当一棵子树被搜索完成之后,就把他和他的父亲合并成同一集合;在搜索当前子树节点的询问时,如果该询问的 ...
分类:
编程语言 时间:
2017-07-29 16:39:04
阅读次数:
313
<!--done--> 最近公共祖先LCA(Tarjan算法)的思考和算法实现 LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 小广告:METO CODE 安溪一中信息学在线评测系统(OJ) //由于这是第一篇博客..有点瑕疵...比如我把false写成了flase...看的时 ...
分类:
编程语言 时间:
2017-07-21 17:10:53
阅读次数:
194
考虑非莫队的离线算法。。 若[l,r]中有重复数值很麻烦,考虑取一个数为代表(最左或最右) 1.最左:用BIT,先把所有第一个出现的数扔进去,将询问左端点升序,每次都可能产生历史的无用点,并出现新的“第1次出现点”,只需将其加入BIT即可。 2.最右,做法类似 当然有在线做法了(copy), 考虑区 ...
分类:
其他好文 时间:
2017-06-04 13:47:59
阅读次数:
118
原文传送门orzJVxie Tarjan(离线)算法的基本思路及其算法实现 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节 ...
分类:
其他好文 时间:
2017-05-31 21:29:39
阅读次数:
250
hiho1067 题目链接 问树上两个点的最近公共祖先 第一次写所谓的离线算法,不是来一个询问就处理一下,而是在扫描树的过程中每扫到一个点就处理和这个点相关的询问。 因为这个点的祖先肯定都访问过一次了,且所有标记为1的点都是这个点的祖先 第一次扫到这个点时标记为1,扫完这个点的所有子节点后标记为2; ...
分类:
其他好文 时间:
2017-05-27 19:18:16
阅读次数:
161
传送门 莫队基础题,适合我这种初学者。 莫队是离线算法,通常不带修改,时间复杂度为 O(n√n) 我们要先保证通过 [ l , r ] 求得 [ l , r + 1 ] , [ l , r - 1 ] , [ l - 1 , r ] , [ l + 1 , r ] 的效率是O(1)的 对于莫队的理解 ...
分类:
其他好文 时间:
2017-05-19 20:16:06
阅读次数:
149
LCA目前比较流行的算法主要有tarjian,倍增和树链剖分 1)tarjian 是一种离线算法,需要提前知道所有询问对 算法如下 1.读入所有询问对(u,v),并建好树(建议邻接表) 2.初始化每个节点各属一个并查集,都指向自己 3.对整棵树进行dfs(深度优先搜索)遍历 每处理到一个新节点(u) ...
分类:
其他好文 时间:
2017-05-19 18:40:44
阅读次数:
315
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14809 Accepted Submission(s): 562 ...
分类:
编程语言 时间:
2017-04-01 23:45:13
阅读次数:
327
标题就很233的题目 数据结构滑稽题 在线算法:: 可并堆维护 太难写了 表示不爱 离线算法::带权并查集将操作离散到连续的区间上(超银河英雄传说 并查集基础训练题) 线段树处理之 比较simple 1 #include <bits/stdc++.h> 2 #define N 300010 3 us ...
分类:
其他好文 时间:
2017-01-08 19:06:18
阅读次数:
237
概念: 对于有根树T的两个节点u,v,最近公共祖先LCA(T, u, v)表示一个节点 x, 满足 x 是 u , v 的祖先且 x 的深度尽可能的大.即从 u 到 v 的路径一定经过点 x. 算法: 解决LCA问题比较经典的是Tarjan - LCA 离线算法,还有另外一种方法,是经过一系列处理将 ...
分类:
其他好文 时间:
2016-08-13 15:30:30
阅读次数:
130