LCA_Tarjan

参考博客:https://www.cnblogs.com/JVxie/p/4854719.html

LCA的Tarjan写法需要结合并查集

从叶子节点往上并

int Find (int x) {
return x == pre[x] ? x:pre[x] = Find(pre[x]);
}
void dfs(int x,int w,int fa) {
d[x] = w; //点x的深度
//遍历与点x相连的点(除了已经访问过的和其父节点)
for (int i = ; i < v[x].size(); i++) {
if (!vis[v[x][i]] && v[x][i] != fa) {
dfs(v[x][i],w+,x);
pre[v[x][i]] = x;
vis[v[x][i]] = ;
}
}
//访问所有和x有询问关系的e
//如果e被访问过;
   //x,e的最近公共祖先为find(e);
}

LCA_倍增

  参考博客:https://www.cnblogs.com/zhouzhendong/p/7256007.html

  先写暴力写法:当x,y深度不同时先把深的调到和浅的同一深度再一起往前面跳找其最近公共祖先。

void dfs(int f,int u){
fa[u]=f;
d[u]=d[f]+;
for (int i=;i<v[u].size();i++)
if (v[u][i]!=f) dfs(u,v[u][i]);
}
int LCA(int a,int b){
if (d[a]>d[b])
swap(a,b);
while (d[b]>d[a]) b=fa[b];
while (a!=b) a=fa[a],b=fa[b];
return a;
}

  显然,一个一个的跳太慢了,我们可以考虑通过二进制进行优化,也就是倍增。

void dfs(int f,int u) {
fa[u][] = f;
dep[u] = dep[f] + ;
for (int i = ; i <= ; i++) {
fa[u][i] = fa[fa[u][i-]][i-];
//其他操作
}
for (int i = ; i < v[u].size(); i++) {
if (f == v[u][i]) continue;
dfs(u,v[u][i]);
}
}
void lca(int x,int y) {
memset(ans,,sizeof(ans));
if (dep[x] < dep[y]) swap(x,y);
for (int i = ; i >= ; i--)
if (dep[fa[x][i]] >= dep[y]) {
//其他操作
x = fa[x][i];
}
if (x == y) {
return;
}
for (int i = ; i >= ; i--)
if (fa[x][i] != fa[y][i]) {
//其他操作
x = fa[x][i],y = fa[y][i];
}
}

例题:洛谷P3292 [SCOI2016]幸运数字  | 题解

LCA (Tarjan&倍增)的更多相关文章

  1. [codevs1036]商务旅行<LCA:tarjan&倍增>

    题目链接:http://codevs.cn/problem/1036/ 今天翻箱倒柜的把这题翻出来做了,以前做的时候没怎么理解,所以今天来重做一下 这题是一个LCA裸题,基本上就把另一道裸题小机房的树 ...

  2. HDU 2874 Connections between cities(LCA Tarjan)

    Connections between cities [题目链接]Connections between cities [题目类型]LCA Tarjan &题意: 输入一个森林,总节点不超过N ...

  3. POJ 1986 Distance Queries(LCA Tarjan法)

    Distance Queries [题目链接]Distance Queries [题目类型]LCA Tarjan法 &题意: 输入n和m,表示n个点m条边,下面m行是边的信息,两端点和权,后面 ...

  4. LCA Tarjan方法

    LCA Tarjan方法 不得不说,高中生好厉害,OI大佬,感觉上个大学好憋屈啊! 说多了都是眼泪 链接拿去:http://www.cnblogs.com/JVxie/p/4854719.html

  5. 关于LCA的倍增解法的笔记

    emmmmm近日刚刚学习了LCA的倍增做法,写一篇BLOG来加强一下印象w 首先 何为LCA? LCA“光辉”是印度斯坦航空公司(HAL)为满足印度空军需要研制的单座单发轻型全天候超音速战斗攻击机,主 ...

  6. LCA tarjan+并查集POJ1470

    LCA tarjan+并查集POJ1470 https://www.cnblogs.com/JVxie/p/4854719.html 不错的一篇博客啊,让我觉得LCA这么高大上的算法不是很难啊,嘻嘻嘻 ...

  7. LCA的倍增算法

    LCA,即树上两点之间的公共祖先,求这样一个公共祖先有很多种方法: 暴力向上:O(n) 每次将深度大的点往上移动,直至二者相遇 树剖:O(logn) 在O(2n)预处理重链之后,每次就将深度大的沿重链 ...

  8. [模板]LCA的倍增求法解析

    题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...

  9. hihoCoder #1067 : 最近公共祖先·二 [ 离线LCA tarjan ]

    传送门: #1067 : 最近公共祖先·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上上回说到,小Hi和小Ho用非常拙劣——或者说粗糙的手段山寨出了一个神奇的网站 ...

  10. LCA算法解析-Tarjan&倍增&RMQ

    原文链接http://www.cnblogs.com/zhouzhendong/p/7256007.html UPD(2018-5-13) : 细节修改以及使用了Latex代码,公式更加美观.改的过程 ...

随机推荐

  1. poj 3675 Telescope (圆与多边形面积交)

    3675 -- Telescope 再来一题.这题的代码还是继续完全不看模板重写的. 题意不解释了,反正就是一个单纯的圆与多边形的交面积. 这题的精度有点搞笑.我用比较高的精度来统计面积,居然wa了. ...

  2. 2018-6-24-WPF-使用RPC调用其他进程

    title author date CreateTime categories WPF 使用RPC调用其他进程 lindexi 2018-06-24 14:41:29 +0800 2018-2-13 ...

  3. SAX解析xml (遍历DOM树各节点)

    本文参考 http://yangjunfeng.iteye.com/blog/401377 1. books.xml <?xml version="1.0" encoding ...

  4. Spring Security实现禁止用户重复登陆(配置及原理)

    系统使用了Spring Security做权限管理,现在对于系统的用户,需要改动配置,实现无法多地登陆.   一.SpringMVC项目,配置如下: 首先在修改Security相关的XML,我这里是s ...

  5. Vue 组件中的data数据

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. java List接口

    Collection子接口: List是有序的集合,集合中每个元素都有对应的顺序序列.List集合可使用重复元素,可以通过索引来访问指定位置的集合元素(顺序索引从0开始),List集合默认按元素的添加 ...

  7. SVN 树冲突解决详解

    https://blog.csdn.net/xgf415/article/details/75196714 SVN 冲突包括 内容冲突:当两名(或更多)开发人员修改了同一个文件中相邻或相同的行时就会发 ...

  8. 基于串口调试助手的WIFI模块调试-FPGA简单联网(点灯)

    根据正点原子的<ATK-ESP8266 WIFI用户手册>,使用XCOM V2.2串口调试助手测试WIFI模块[26].在本系统中运用到的功能主要是TCP/IP模式中的TCP Client ...

  9. jQuery-自己封装的弹框

    (function () { CDK={ cfm:function(resFun,errFun){ var confirm=document.createElement('div'); confirm ...

  10. Leecoder466 Count The Repetitons

    Leecoder466 Count The Repetitons 题目大意 定义\([s,n]\)为连续\(n\)个串\(s\)构成的串 现在给定\(s_1,n_1,s_2,n_2\),求最大的\(m ...