初二学完忘了QAQ,今天再学一发

原题Link:https://www.luogu.org/problem/show?pid=3379

Code:

 1 #include <iostream>
 2 #include <cstdio>
 3 const int maxn=500000*2+100;
 4 int n,m,i,to[maxn],root,x,y,last[maxn],next[maxn],next1[maxn],last1[maxn],to1[maxn],ans[maxn],fa[maxn],v[maxn];
 5 using namespace std;
 6 inline void read(int &k)
 7 {
 8     int f=1;char c=getchar();k=0;
 9     while (c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
10     while (c>='0'&&c<='9')k=k*10+c-'0',c=getchar();
11     k*=f;
12 }
13 inline int gf(int now)
14 {
15     return fa[now]==now?now:fa[now]=gf(fa[now]);
16 }
17 inline void dfs(int now)
18 {
19     v[now]=1;
20     for(int cur=last[now];cur;cur=next[cur])
21     {
22         if (!v[to[cur]])
23         {
24             dfs(to[cur]);
25             fa[to[cur]]=now;
26         }
27     }
28     for (int cur=last1[now];cur;cur=next1[cur])
29     if (v[to1[cur]])ans[(cur+1)>>1]=gf(to1[cur]);
30 }
31 int main()
32 {
33     read(n);read(m);read(root);
34     for (i=1;i<n;i++)
35     {
36         read(x);read(y);
37         to[i*2-1]=y;
38         next[i*2-1]=last[x];
39         last[x]=i*2-1;
40         to[i*2]=x;
41         next[i*2]=last[y];
42         last[y]=i*2;
43     }
44     for (i=1;i<=m;i++)
45     {
46         read(x);read(y);
47         to1[i*2-1]=y;
48         next1[i*2-1]=last1[x];
49         last1[x]=i*2-1;
50         to1[i*2]=x;
51         next1[i*2]=last1[y];
52         last1[y]=i*2;
53     }
54     for (i=1;i<=n;i++)fa[i]=i;
55     dfs(root);
56     for (i=1;i<=m;i++)
57     printf("%d\n",ans[i]);
58 }

View Code

转载于:https://www.cnblogs.com/mczhuang/p/7339987.html

LCA Tarjan相关推荐

  1. 最近公共祖先 LCA Tarjan算法

    来自:http://www.cnblogs.com/ylfdrib/archive/2010/11/03/1867901.html 对于一棵有根树,就会有父亲结点,祖先结点,当然最近公共祖先就是这两个 ...

  2. hdu 4547(LCA+Tarjan)

    解题思路:很明显的LCA问题,用Tarjan离线算法即可.这里输入的可能是字符串,所以直接用map保存.此外,根据题意,这里需要稍稍有点变化,因为cd:a\b\c...这里是一步即可完成,所以在查询a ...

  3. 洛谷 - P3379 【模板】最近公共祖先(LCA)(RMQ求LCA/Tarjan求LCA)

    题目链接:点击查看 题目大意:给出一棵 n 个点组成的有根树,再给出 m 次询问,每次询问需要回答点 x 和点 y 的 lca 题目分析:今天新学了两种蛮有意思的求 LCA 的方法,总结一下四种方法各 ...

  4. 最近公共祖先(LCA,Tarjan)

    一定要耐心慢慢看 Tarjan算法的优点在于相对稳定,时间复杂度也比较居中,也很容易理解. 下面详细介绍一下Tarjan算法的基本思路: 1.任选一个点为根节点,从根节点开始. 2.遍历该点u所有子节 ...

  5. LCA 朴素算法+树差分倍增+Tarjan算法 三种算法实现c++代码实现

    哔哩哔哩up视频:https://www.bilibili.com/video/BV1nE411L7rz?t=379 转载:http 文章目录 树差分 & 倍增LCA Tarjan 朴素算法 ...

  6. 数据结构课程设计-神秘国度的爱情故事-LCA:tarjan+离线/树链剖分/暴力

    1.无脑暴力dfs:   O(n*m) 2.LCA/tarjan+离线处理: O(n+m) 3.LCA/树链剖分: O(nlogn+m)~O(nlogn+mlogn) 4.LCA/倍增思想(有空再补) ...

  7. Tarjan算法_LCA

    参考资料:Tarjan算法_LCA  tarjan算法求LCA  Tarjan 算法&模板 只是对其中的代码进行一下注释,如有错误还得回来再改. //不怕别人比你聪明,就怕别人比你聪明还比你努 ...

  8. 斯大林格勒拖拉机厂LCA项目研制成功

    什么是LCA? 话不多说,同志们先来康康LCA是什么东西.(逃 LCA"光辉"是印度斯坦航空公司(HAL)为满足印度空军需要研制的单座单发轻型全天候超音速战斗攻击机,主要任务是争夺 ...

  9. 「LuoguP3379」 【模板】最近公共祖先(LCA)

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

  10. 图论--最近公共祖先LCA

    最近公共祖先LCA LCA(Least Common Ancestors),即最近公共祖先,是指这样一个问题:在有根树中,找出某两个结点u和v最近的公共祖先(另一种说法,离树根最远的公共祖先) 最近公 ...

最新文章

  1. 在 ASP.NET 网页中不经过回发而实现客户端回调
  2. python使用退格键时出现^H解决方法
  3. WINCE6.0 error C2220: warning treated as error问题解决
  4. easyui打开新的选项卡_Easyui Tabs 标签页/选项卡_EasyUI 插件
  5. OpenGL实现3D立体显示
  6. 法流程图_世界五大学习方法之西蒙学习法
  7. QT不让windows休眠的方法
  8. Tomcat详解(二)——tomcat安装与配置
  9. 077 logging模块
  10. Atitit 怎么阅读一本书 消化 分析 检索 attilax总结 1. 读书的本质 是数据的处理,大量的数据,处理能力有限的大脑 2 2. ETL数据清洗转换 摘要,缩小数据规模 2 2.1
  11. OpenCV实现监控移动侦测
  12. JAVA山地车deca_越野怪兽 JAVA摆渡人 (ANIMA)山地车
  13. android手机设置固定dns,手机怎么设置dns 手机设置dns方法【详解】
  14. 计算机电源认证,80plus认证级别含义扫盲
  15. Cocos2d-x-3c 设计之路 CocosBase CocosNet CocosWidget
  16. Vue Element 使用required提示语问题 出现‘xxx is required‘解决方案
  17. python 笛卡尔积 两个表_多个集合计算笛卡尔积-Python
  18. WMLS10自动建立BIN位(模板配置)
  19. win10下完美卸载ubuntu
  20. Mac环境下安装MongoDB数据库

热门文章

  1. 新出炉的面试题,了解一下?
  2. mysql 语法手册_MySQL语法大全_自己整理的学习笔记
  3. win10无法装载重装系统iso文件_华硕笔记本怎么自己重装系统|华硕笔记本自己装系统教程...
  4. python检测excel是否打开_Python: 如何判断远程服务器上Excel文件是否被人打开
  5. 你还在生产环境改代码么?函数计算版本管理(三)使用别名进行灰度发布...
  6. 注意!思科Aironet 1830和1850系列存在硬编码密码,请尽快修复!
  7. [.NET] 《Effective C#》快速笔记(四)- 使用框架
  8. Ubuntu 12 修改环境变量
  9. JavaScript判断浏览器类型及版本(新增IE11)
  10. 原创Android开发文章集合贴