【专题】LCA(最近公共祖先)
来源:互联网 发布:ubuntu删除文件夹加 编辑:程序博客网 时间:2024/05/22 11:34
简介
首先是最近公共祖先的概念(什么是最近公共祖先?):
在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。
换句话说,就是两个点在这棵树上距离最近的公共祖先节点。
所以LCA主要是用来处理当两个点仅有唯一一条确定的最短路径时的路径。
讲解
我们今天介绍一种计算LCA的方法——Tarjan。
Tarjan算法是一种离线的操作。它可以实现一次性用O(nm)的时间(m是询问的个数)算出所有询问的LCA。
Tarjan算法大概流程有三个步骤:
1. 搜索子节点,直到无法延伸下去为止。
2. 查找询问,即所有与它有关系的点,如果它也被访问过,就可以直接寻找。
3. 查询完毕,与父亲合并,返回。
程序的流程大概是这样的:
void Tarjan(int t){ int i=last[t],yy=0; bz[t]=true; while (i) { yy=tov[i]; if (bz[yy]==false) { Tarjan(yy); father[yy]=t;//合并父亲结点 } i=next[i]; } for (i=1;i<=与t有关系的点的个数;++i) { 设这个数为x; LCA(t,x)=find(x); }}
这样可能还是不太明白,那我在这里举一个模拟的例子。
我们从根结点开始搜索:
这样操作完整棵树,然后就可以把所有的操作都算完……
阅读全文
2 0
- 【专题】LCA(最近公共祖先)
- LCA(最近公共祖先)
- 【最近公共祖先(LCA)】
- 最近公共祖先(LCA)
- 最近公共祖先(LCA)
- LCA(最近公共祖先)
- LCA----【模板】最近公共祖先(LCA)
- 最近公共祖先LCA
- 最近公共祖先(LCA)
- Lca 最近公共祖先
- LCA----最近公共祖先
- LCA (最近公共祖先)
- LCA最近公共祖先
- LCA 最近公共祖先
- 最近公共祖先 LCA
- LCA--最近公共祖先
- LCA(最近公共祖先)
- LCA最近公共祖先
- mysql外键的优缺点和使用
- C语言存储空间布局以及static解析
- SSL P2575 给出字符串
- java基础第八天 多态
- Console线配置交换机
- 【专题】LCA(最近公共祖先)
- 静态路由配置
- 字典实例:统计词频
- SSL P2576 平台
- 【NOIP2008PJ】立体图
- android的三种动画详解
- 多线程。
- PhotoShop CS5 /ps5 激活码(全部验证有效)+破解验证方式
- 音响设备开关顺序