Tarjan求lca
https://vjudge.net/problem/POJ-1330
是到水的题,简单点在于其只需求一对lca即可,这是比较简单的。
主要看了以下blog
http://blog.csdn.net/hnust_xiehonghao/article/details/9109295
要点在于
1.用并查集维护。
2.必须是离线的,在线不行。
3.存边可以用vector,比较方便,毕竟边不多。
*4.rank可以实现启发式并查集,可以优化一些时间。
5.anse数组是存祖先的,因为并查集维护,所以只需一步更新即可。
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cmath> 5 #include<string> 6 #include<cstring> 7 #include<vector> 8 const int size=10007; 9 10 int n,f[size],anse[size],in[size],rank[size],vis[size]; 11 using namespace std; 12 vector<int> node[size],que[size]; 13 void init(); 14 int find(int num); 15 void conbine(int aa,int bb); 16 void lca(int root) 17 { 18 int i,sz; 19 anse[root]=root; 20 sz=node[root].size(); 21 for (int i=0;i<sz;i++) 22 { 23 // if (fa!=node[root][i]) 24 // {25 lca(node[root][i]); 26 conbine(root,node[root][i]); 27 anse[find(node[root][i])]=root; 28 // } 29 } 30 vis[root]=1; 31 sz=que[root].size(); 32 for (int i=0;i<sz;i++) 33 { 34 if (vis[que[root][i]]) 35 { 36 printf("%d\n",anse[find(que[root][i])]); 37 return; 38 } 39 } 40 } 41 int main() 42 { 43 int cas,i; 44 scanf("%d",&cas); 45 while (cas--) 46 { 47 int x,y; 48 scanf("%d",&n); 49 init(); 50 for (int i=1;i<=n-1;i++) 51 { 52 scanf("%d%d",&x,&y); 53 node[x].push_back(y); 54 in[y]++; 55 } 56 scanf("%d%d",&x,&y); 57 que[x].push_back(y); 58 que[y].push_back(x); 59 for (y=1;y<=n;y++) 60 { 61 if (in[y]==0) break; 62 } 63 lca(y); 64 } 65 } 66 void init() 67 { 68 int i; 69 for (int i=1;i<=n;i++) 70 { 71 node[i].clear(); 72 que[i].clear(); 73 f[i]=i; 74 rank[i]=1; 75 } 76 memset(vis,0,sizeof(vis)); 77 memset(in,0,sizeof(in)); 78 memset(anse,0,sizeof(anse)); 79 } 80 int find(int num) 81 { 82 if (f[num]!=num) f[num]=find(f[num]); 83 return f[num]; 84 } 85 void conbine(int aa,int bb) 86 { 87 int x=find(aa),y=find(bb); 88 if (x==y) return; 89 if (rank[x]<=rank[y]) 90 { 91 f[x]=y; 92 rank[y]+=rank[x]; 93 } 94 else 95 { 96 f[y]=x; 97 rank[x]+=rank[y]; 98 } 99 }
求在线算法要用倍增lca
转载于:https://www.cnblogs.com/fengzhiyuan/p/6775445.html
Tarjan求lca相关推荐
- 洛谷 - P3379 【模板】最近公共祖先(LCA)(RMQ求LCA/Tarjan求LCA)
题目链接:点击查看 题目大意:给出一棵 n 个点组成的有根树,再给出 m 次询问,每次询问需要回答点 x 和点 y 的 lca 题目分析:今天新学了两种蛮有意思的求 LCA 的方法,总结一下四种方法各 ...
- 图论--tarjan求lca
这是一种离线算法,但是时间超级快,是O(n+m). 主要是dfs实现这个过程. 下面详细介绍一下Tarjan算法的基本思路: 1.任选一个点为根节点,从根节点开始. 2.遍历该点u所有子节点v,并标记 ...
- tarjan求LCA模板
废话不多说,模板拿来. 1 # include <iostream> 2 # include <cstdio> 3 # include <cstring> 4 # ...
- [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分)
[Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分) 题面 给出一个无向图,以及q条有向路径.问是否存在一种给边定向的方案,使得 ...
- 牛客 - 牛半仙的妹子Tree(按询问分块+RMQ求LCA)
题目链接:点击查看 题目大意:给出一棵有 n 个节点的树,需要执行 m 次操作: 1 x:点 x 被染色,且随后每一秒染色的区域都会向外扩展一个单位 2 x:清空所有的染色 3 x:问点 x 是否被染 ...
- 【POJ - 3694】Network(对dfn求lca 或 缩点+lca 或 边双连通+并查集)
题干: 网络管理员管理大型网络.该网络由N台计算机和成对计算机之间的M链路组成.任何一对计算机都通过连续的链接直接或间接连接,因此可以在任何两台计算机之间转换数据.管理员发现某些链接对网络至关重要,因 ...
- 树上倍增求LCA及例题
先瞎扯几句 树上倍增的经典应用是求两个节点的LCA 当然它的作用不仅限于求LCA,还可以维护节点的很多信息 求LCA的方法除了倍增之外,还有树链剖分.离线tarjan ,这两种日后再讲(众人:其实是你 ...
- 求 LCA 的三种方法
(YYL: LCA 有三种求法, 你们都知道么?) (众神犇: 这哪里来的傻叉...) 1. 树上倍增 对于求 LCA, 最朴素的方法是"让两个点一起往上爬, 直到相遇", &qu ...
- 《信息学奥赛一本通 提高篇》 第四部分 数据结构 第4章 倍增求LCA
例题1 点的距离 信息学奥赛一本通(C++版)在线评测系统 例题2 暗的连锁(Poj3417) 信息学奥赛一本通(C++版)在线评测系统 LOj10131 暗的连锁_juruo_xlh-CSDN博客 ...
最新文章
- SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )
- 海量数据处理——位图法bitmap
- Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...
- java实现语法分析器_语法分析 | 语法分析的任务
- 让VC编译的Release版本程序在其他机器上顺利运行
- windows应用程序的开发一个键盘记录器
- ASP.NET使用管道模型(PipleLines)处理HTTP请求
- git .gitignore 忽略的文件还会被提交
- 随手记_重建的五花八门的点云地图效果(供娱乐)
- php无法加载ssh扩展,php的ssh2扩展正常安装,却无法连接目标主机
- ASP.NET MVC 5高级编程 (pdf书)
- ES RestClient查询文档
- python实现电脑自动开机_python自动循环定时开关机(非重启)测试
- Xpose 建立新工程
- 离散分配方式——基本页式存储管理方式
- android 重复文件夹,清理手机空间小工具!搜索重复文件App
- caffe 损失函数
- linux控制cpu占用率
- 研究中学习【方法】 | Heckman二值选择模型
- 调试串口导致烧录失败
热门文章
- ubuntu20.04LTS系统的终端terminal透明化设置
- java byte 判断相等_深入理解Java装箱与拆箱
- 使用睡袋_睡袋能用几十年?!只要你照着做(一)
- android工程引入unity,Unity导出Android Studio工程
- echarts做企业关系图谱_echarts 关系图
- python所有算法_Python实现的各种常见分布算法示例
- 用C语言写HMI程序,HMI画面元素组成设计及代码生成方法与流程
- c++图形中如何判断鼠标点击在一条直线上_中考数学常考题型精讲精练系列:函数图象上点的存在性问题中的距离与面积...
- el table 固定表头和首行_el-table表头根据内容自适应,解决表头错位和固定列错位(完美解决)...
- 动画 | 空调是怎么制冷的?