记节点v到根点的深度为depth[v],那么当w是v和u的最近公共祖先时,可以想让v和u在同一个深度,即让深度高的走|depth[v]-depth[u]|然后一起走, 直到遇见相同的祖先时就是最近公共祖先了。如果是计算一次的话还可以,但有很多询问时就不行了。 那么可以利用父亲节点的信息来做了,可以通 ...
分类:
其他好文 时间:
2017-07-22 13:20:32
阅读次数:
227
答案问的是最小值且取值具有单调性,所以可以二分。 首先可以确定虫洞一定在所有耗费时间超过mid的计划路径的交集上,把所有计划按花费时间来从大到小排序就可以很容易找出它们。 在check中用一个d[x]数组标记从x到根节点的路径被走了几次,d[u]++,d[v]++,d[lca]-=2,然后调用dfs ...
分类:
其他好文 时间:
2017-07-22 12:13:18
阅读次数:
183
<!--done--> 最近公共祖先LCA(Tarjan算法)的思考和算法实现 LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 小广告:METO CODE 安溪一中信息学在线评测系统(OJ) //由于这是第一篇博客..有点瑕疵...比如我把false写成了flase...看的时 ...
分类:
编程语言 时间:
2017-07-21 17:10:53
阅读次数:
194
Nearest Common Ancestors Description A rooted tree is a well-known data structure in computer science and engineering. An example is shown below: In t ...
分类:
其他好文 时间:
2017-07-20 20:14:11
阅读次数:
151
父子进程间通过管道通信。管道只能在具有公共祖先的两个进程间使用,通常,一个管道有另一个进程创建,在进程调用fork之后,这个管道就能在父进程和子进程之间使用了。一般的进程,fd[0]表示读,fd[1]表示写。如果有用到管道,则写进管道,从管道读。父子进程之间。所以,通过..
分类:
系统相关 时间:
2017-07-18 12:04:16
阅读次数:
168
管道是最早的Unix进程间通信形式,它存在于全部的Unix实现中。关于管道,有例如以下几点须要知道: 1、它是半双工的,即数据仅仅能在一个方向上流动。虽然在某些Unix实现中管道能够是全双工的。但须要对系统进行某些设置。在Linux系统中,它是半双工的。 2、它没有名字。因此仅仅能在具有公共祖先的进 ...
分类:
系统相关 时间:
2017-07-15 20:26:47
阅读次数:
294
题目: 给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。 最近公共祖先是两个节点的公共的祖先节点且具有最大深度。 LCA(3, 5) = 4 LCA(5, 6) = 7 LCA(6, 7) = 7 Java代码: ...
分类:
其他好文 时间:
2017-07-15 16:44:14
阅读次数:
226
本文转载自:http://hi.baidu.com/lydrainbowcat/item/f8a5ac223e092b52c28d591c 作者提示:在阅读本文之前,请确保您已经理解并掌握了基本的Tarjan算法,不会的请到http://hi.baidu.com/lydrainbowcat/blog ...
分类:
其他好文 时间:
2017-07-12 01:17:56
阅读次数:
211
题目大意:给你n个节点的森林(注意不是一棵树),m条路径的长度,c个询问,要你回答每个询问两个点i和j的最短距离,或者回答没有连接。 数据范围:2<=n<=10000,0<=m<10000,1<=c<=1000000 解题思路:对于每个节点,求出其到根的距离a[i],然后求两点的最近公共祖先LCA, ...
分类:
其他好文 时间:
2017-07-10 20:11:38
阅读次数:
173
详细的询问: 1、该树是二叉查找树? 最近公共祖先 二叉查找树:(http://www.lintcode.com/problem/lowest-common-ancestor/) 思路:利用左子树特点:左子树 < 根 <= 右,输入节点跟根节点比较,都小于,在左子树,都大约右子树,递归的去遍历;找到 ...
分类:
其他好文 时间:
2017-07-03 23:45:50
阅读次数:
322