求最短公共祖先,是最长公共子序列的变形。在DP的同时记录下路径,然后递归回去输出即可。如果碰到公共的,只输出一次。以第一个样例为例:图中数字是最大公共子段的长度,下标代表路径。带下划线的是递归时所走的路径。 1 //#define LOCAL 2 #include 3 #include 4 #i.....
分类:
其他好文 时间:
2014-07-31 16:02:46
阅读次数:
232
一 基础知识梳理:并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。使用并查集时,首先会存在一组...
分类:
其他好文 时间:
2014-07-27 22:19:59
阅读次数:
323
poj1330:http://poj.org/problem?id=1330题意:求一棵树上的两点的最近的公共祖先。题解:第一次接触LCA,第一道模板题。 1 #include 2 #include 3 #include 4 #include 5 using namespace s...
分类:
其他好文 时间:
2014-07-27 22:06:30
阅读次数:
243
并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。
使用并查集时,首先会存在一组不相交的动态集合 S={S1,S2,?,Sk},一般都会使用一个整数表示集合中的一个元素。
每个集合可能包含一个...
分类:
其他好文 时间:
2014-07-19 23:23:29
阅读次数:
378
管道是UNIX系统IPC最古老形式,并且所有UNIX系统都提供此种通信机制。管道由下面两种局限性:1)历史上,它们是半双工的(即数据只能在一个方向上流动)2)它们只能在具有公共祖先的进程之间使用。通常,一个管道由一个进程创建,然后该进程调用fork,此后父、子进程之间就可应用该管道管道由调用pipe...
分类:
其他好文 时间:
2014-07-19 22:19:57
阅读次数:
189
树 除了空树外,有且仅有一个根结点,且除根结点外,其余结点有且仅有一个前驱
判断图是否为树,则需判断它们的公共祖先是否仅有一个,且入度都小于2,并且不能形成环...
分类:
其他好文 时间:
2014-07-18 21:38:48
阅读次数:
160
巧妙的并查集。对于 i,j,k 可以表示 d[j] - d[i-1]= k;若i,j有公共祖先 则可以求出 分别到 祖先的距离,差值就是答案。#include#include#include#include#include#include#include#include#include#includ...
分类:
其他好文 时间:
2014-07-16 18:33:17
阅读次数:
164
题目来源:POJ 1986 Distance Queries
题意:给你一颗树 q次询问 每次询问你两点之间的距离
思路:对于2点 u v dis(u,v) = dis(root,u) + dis(root,v) - 2*dis(roor,LCA(u,v)) 求最近公共祖先和dis数组
#include
#include
#include
using namespace std;
co...
分类:
其他好文 时间:
2014-07-10 23:50:17
阅读次数:
326
并查集能做什么? 1.连接两个对象; 2.查询两个对象是否在一个集合中,或者说两个对象是否是连接在一起的。 并查集有什么应用? 1. Percolation问题、 2. 无向图连通子图个数 3. 最近公共祖先问题 4. Kruskal最小生成树 5. 社交网络 等等 并查集数据结构: 并查集是一种树...
分类:
其他好文 时间:
2014-07-09 14:13:20
阅读次数:
214
LCA tarjan 的离线算法
#include
#include
#include
using namespace std;
const int maxn = 40010;
int first[maxn], head[maxn], cnt, sum;
struct edge
{
int u, v, w, next;
}e[maxn*2], qe[maxn], Q[maxn];
int...
分类:
其他好文 时间:
2014-07-09 10:23:35
阅读次数:
256