并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。 使用并查集时,首先会存在一组不相交的动态集合 ...
分类:
其他好文 时间:
2016-04-02 18:53:32
阅读次数:
166
【题意】 有若干个询问,询问路径u,v上的颜色总数,另外有要求a,b,意为将a颜色看作b颜色。 【思路】 vfk真是神系列233。 Quote: 用S(v, u)代表 v到u的路径上的结点的集合。 用root来代表根结点,用lca(v, u)来代表v、u的最近公共祖先。 那么 S(v, u) = S ...
分类:
移动开发 时间:
2016-04-01 12:50:11
阅读次数:
280
管道 管道是unix ipc的最古老形式,是一种在内存中的特殊文件,只能在具有公共祖先的进程之间使用(即父子进程,兄弟进程)。 管道由pipe函数创建 fd[1]写,fd[0]读。 单个进程的管道几乎没有任何用处,通常,调用pipe的进程接着调用fork,这样就创建了父子进程间的管道。 输出结果:
分类:
系统相关 时间:
2016-03-22 00:32:02
阅读次数:
301
1. 管道局限性: (1) 半双工; (2) 只能在具有公共祖先的进程之间使用; 2. 管道创建函数: 经由filedes返回两个文件描述符:filedes[0]为读端,filedes[1]为写端; 3. 惯用方式: 由于单个进程中的管道并没有任何用户,所以,通常调用pipe的进程会接着调用fork
分类:
系统相关 时间:
2016-03-19 22:58:17
阅读次数:
308
两个最近的点u和v的最近的公共的祖先称为最近公共祖先(LCA)。普通的LCA算法,每算一次LCA的时间复杂度为线性o(n); 这里讲LCA + 二分的方法。首先对于任意的节点v,利用其父节点的信息,可以通过par2[v]=par[par[v]]得到向上走两步的节点。依此信息可以通过par4[v]=p
分类:
其他好文 时间:
2016-02-26 23:34:06
阅读次数:
194
概述: 并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。 使用并查集时,首先会存在一组不相交的...
分类:
编程语言 时间:
2016-02-21 17:14:25
阅读次数:
200
学习博客: http://noalgo.info/476.html 讲的很清楚! 对于一颗树,dfs遍历时,先向下遍历,并且用并查集维护当前节点和父节点的集合。这样如果关于当前节点(A)的关联节点(B)(及要求的最近祖先的另一个点)之前被访问过,那么 B可定已经属于一个集合,先前对于访问过的点,已经
分类:
编程语言 时间:
2016-02-11 00:30:12
阅读次数:
260
从root开始遍历,如果n1和n2中的任一个和root匹配,那么root就是LCA。 如果都不匹配,则分别递归左、右子树,如果有一个 key(n1或n2)出现在左子树,并且另一个key(n1或n2)出现在右子树,则root就是LCA. 如果两个key都出现在左子树,则说明LCA在左子树中,否则在右子...
分类:
其他好文 时间:
2016-01-25 19:37:18
阅读次数:
157
给定一个二叉搜索树的两个节点,找出他们的最近公共祖先,如, _______6______ / \ ___2__ ___8__ / \ / \ 0 4 7 ...
分类:
其他好文 时间:
2016-01-24 23:48:59
阅读次数:
143
题目最近公共祖先给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。最近公共祖先是两个节点的公共的祖先节点且具有最大深度。样例对于下面这棵二叉树 4 / \3 7 / \ 5 6LCA(3, 5) =4LCA(5, 6) =7LCA(6, 7) =7解题不知道如何下手,参考链接,...
分类:
其他好文 时间:
2016-01-16 19:28:38
阅读次数:
221