有两个基础需要掌握:RMQ,以及LCA。RMQ:dp[i][j]表示下标从i开始,长度为2^j的一段元素中的最值。则易得状态转移如下:dp[i][j]=max/min(dp[i][j-1],dp[i+2^j-1][j-1];LCA:最近公共祖先结点的求法:可先进行一次dfs得到欧拉序列。比如对,得到...
分类:
其他好文 时间:
2015-10-15 20:22:47
阅读次数:
177
给定一棵树求任意两个节点的公共祖先tarjan离线求LCA思想是,先把所有的查询保存起来,然后dfs一遍树的时候在判断。如果当前节点是要求的两个节点当中的一个,那么再判断另外一个是否已经访问过,如果访问过的话,那么它的最近公共祖先就是当前节点祖先。下面是tarjan离线模板:#include #in...
分类:
其他好文 时间:
2015-10-12 15:44:07
阅读次数:
185
LCA,全称为Lowest Common Ancestor, 即最近公共祖先。这是对于有根树而言的,两个节点u, v的公共祖先中距离最近的那个被称为最近公共祖先(这解释。。真通俗。。。)我们来看个图:4和7的LCA是2,5和6的LCA是1,2和5的LCA是2。最笨的实现方法就是;对于同一深度的点,一...
分类:
其他好文 时间:
2015-10-07 22:56:59
阅读次数:
265
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.According to thedefinition of LCA on Wikipedia: “The lowest ...
分类:
其他好文 时间:
2015-10-07 22:54:40
阅读次数:
200
LCA 最近公共祖先 Tarjan的基本想法和做法
分类:
编程语言 时间:
2015-10-04 18:24:08
阅读次数:
1647
一,首先就是比较简单(弱智的我看了将近半小时)的tarjan了;我一直在纠结于一个地方就是如果要求的是8和5的话我一直以为他求出来的最近公共祖先是1...但不是,因为8和5都属于2,在遍历2的时候就求出来了,同理要是求8和9的话在遍历4的时候也都求出来了。这一步我想了很久真的怀疑自己的智商。不过至少...
分类:
其他好文 时间:
2015-10-02 16:07:53
阅读次数:
173
Wikioi 3287 货车运输题目描述DescriptionA 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。输入描述Input Descrip...
分类:
其他好文 时间:
2015-09-27 16:12:36
阅读次数:
170
2015北京网络赛 Couple Trees题意:两棵树,求不同树上两个节点的最近公共祖先思路:比赛时看过的队伍不是很多,没有仔细想。今天补题才发现有个 倍增算法,自己竟然不知道。 解法来自 qscqesze,这个其实之前如果了解过倍增的话还是不是很难,不过这题的数据也不是很给力,极限数据理论上.....
分类:
编程语言 时间:
2015-09-23 06:35:54
阅读次数:
225
POJ 1330 Nearest Common Ancestors题意:最近公共祖先的裸题思路:LCA和ST我们已经很熟悉了,但是这里的f[i][j]却有相似却又不同的含义。f[i][j]表示i节点的第2j个父亲是多少 这个代码不是我的,转自 邝斌博客 1 /* **************...
分类:
编程语言 时间:
2015-09-22 23:36:42
阅读次数:
267
最近公共祖先问题(LCA)是求一颗树上的某两点距离他们最近的公共祖先节点,由于树的特性,树上两点之间路径是唯一的,所以对于很多处理关于树的路径问题的时候为了得知树两点的间的路径,LCA是几乎最有效的解法。首先是LCA的倍增算法。算法主体是依靠首先对整个树的预处理DFS,用来预处理出每个点的直接父节点...
分类:
其他好文 时间:
2015-09-21 19:37:31
阅读次数:
156