lca:最近公共祖先

求LCA一般有用倍增的和tarjan的,
倍增的是O(nlogn)的但是可以在线;
tarjan是O(n+Q)的但是必须离线。
应当对于不同的题目适当选择。

tarjan算法的主要思想……是从要求的一对点的访问过程求来的。
比如以一个点u为根的多个小子树内,不同小子树内的点对的lca都是u。
那么可以dfs下去,回上去的时候用并查集合并整棵子树。

看懂网上的或者书上的资料之后代码其实是很简洁的……
模板题目网址

#include<bits/stdc++.h>
using namespace std;
int read(){  int x=0,f=1;char ch=getchar();  while (ch<'0' || ch>'9'){if (ch=='-') f=-1;ch=getchar();}  while (ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}  return x*f;
}
const int       N=500005;
int n,m,S;
int Qcnt,Ecnt;
int fa[N],ans[N];
bool vis[N];
struct Edge{  int next,to;
}E[N<<1];int head[N];
struct Query{  int next,to,id;
}Q[N<<1];int qh[N];
int getfa(int u){  if (fa[u]!=u) fa[u]=getfa(fa[u]);  return fa[u];
}
void add(int u,int v){  E[++Ecnt].next=head[u];  E[Ecnt].to=v;  head[u]=Ecnt;
}
void add1(int u,int v,int t){  Q[++Qcnt].next=qh[u];  Q[Qcnt].to=v;  Q[Qcnt].id=t;  qh[u]=Qcnt;
}
void tarjan(int u){  vis[u]=1,fa[u]=u;  for (int i=head[u];i;i=E[i].next){  int j=E[i].to;  if (!vis[j]) tarjan(j),fa[j]=u;  }  for (int i=qh[u];i;i=Q[i].next){  int j=Q[i].to;  if (vis[j]) ans[Q[i].id]=getfa(j);  }
}
int main(){  n=read(),m=read(),S=read();  int x,y;  for (int i=1;i<n;i++){  x=read(),y=read();  add(x,y),add(y,x);  }  for (int i=1;i<=m;i++){  x=read(),y=read();  add1(x,y,i),add1(y,x,i);  }  tarjan(S);  for (int i=1;i<=m;i++)  printf("%d\n",ans[i]);  return 0;
}  

%dalao% orz
出处:%dalao%

dalao的tajan模板相关推荐

  1. 2019牛客暑期多校训练营(第三场) - D - Big Integer - 数论

    https://ac.nowcoder.com/acm/contest/883/D \(A(n)\) 是由n个1组成的一个整数. 第一步:把 \(A(n)\) 表示为 \(\frac{10^n-1}{ ...

  2. 一些dalao的模板

    费用流(MCMF)这东西很早之前就想写了--但是一直慵懒. 在最大流找增广路的过程中,同时要求了最小费用, 那么我们找的增广路就找费用最小的那一条. 一般最小费用流的"费用"形式是 ...

  3. luogu P3379 【模板】最近公共祖先(LCA)

    lca最近公共祖先,是指两个点最近的祖先节点:求lca我知道的有三种倍增, st表,tarjan,我要介绍的是倍增,我才不会告诉你我只会这一个. 话说我学lca可真的路途曲折,在qbxt,lcy da ...

  4. [FFT/IFFT]快速傅里叶(逆)变化 + 递归和递推模板

    现在时间是2021-2-2,重新回来看2019学习的一知半解的FFTFFTFFT,又有了新的理解 所以修改了以往写过的文章,并增添些许内容 因为过去一年多,上了高中,学的知识多了些,以前不懂的有些东西 ...

  5. 【网络流】最大流问题(EK算法带模板,Dinic算法带模板及弧优化,ISAP算法带模板及弧优化)上下界网络流

    本blog重点是代码 网络流的相关概念 流网络(flow network) 流(flow) 网络的流 残留网络(residual network) 增广路径(augmenting path) Edmo ...

  6. 【模板】高精度 [高精度]

    相当于把各种运算人工模拟一遍,还是很好理解的 参照的是这个dalao的模板   (感觉全机房的都用的这个模板)理解了就差不多了 一些我犯过的错误还有注意的地方 小于的比较要从高位到低位比较 1 #de ...

  7. python 格式化字符串 模板字符串(五分钟读懂)

    格式化字符串 模板字符串 在python字符串最核心的功能 # %s 字符串 占位符 获取传入对象的__str__方法的返回值,并将其格式化到指定位置 # %d 数字整数 占位符 将整数.浮点数转换成 ...

  8. dalao自动报表邮件2.0

    经过昨天的修改优化后,dalao收到了不是"木马"的邮件,欣慰地点了点头,"不错,不错,这几张表设计的简洁明了,看着有货!不过呀,,,这些表的数据太多了一点,十几天的数据 ...

  9. 解方程 ( 迭代法/牛顿迭代/高斯消元 ) 详解及模板

    欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/--萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗-- 一.迭代法解方程 ( ...

最新文章

  1. Ubuntu上使终端显示Git分支(oh-my-zsh)
  2. 一位中科院自动化所博士毕业论文的致谢:二十二载风雨求学路,他把自己活成了光.........
  3. mysql count() 写法,MySQL COUNT()用法及代碼示例
  4. linux 内核升级 网络 不能上网,Deepin Linux 无法上网
  5. java 自定义消息_Vc中自定义消息及其触发使用
  6. js网页返回页面顶部的小方法
  7. 音频降噪处理+java_适当的音频捕获和降噪
  8. COS系统的前端演变和发展
  9. POJ 1804 Brainman (归并排序 -- 求逆序对数)
  10. java 计算反码_java基础知识-原码、反码、补码、运算符
  11. cas单点注销失败Error Sending message to url endpoint
  12. 【2019杭电多校第五场1002=HDU6625】three arrays(01字典树+思维+贪心)
  13. 《程序设计导引及在线实践》开始
  14. 第一章、Zigbee模块的简介及特点
  15. 八皇后问题 (25分)
  16. 企业网站建设流程是什么?三个流程要知道
  17. php 支付宝退款40004,接入支付宝支付 错误码4000,排查方法——开发记录
  18. Java邮件发送基于springboot实现
  19. round函数与roundup函数
  20. 安卓手机便签怎么快速修改重复提醒设置?

热门文章

  1. 蓝桥杯(李白喝酒Java)
  2. 软著申请需要多少钱?大概需要多久?
  3. 10.27 正睿提高9
  4. linux驱动程序的测试,Linux驱动学习笔记(4)字符设备驱动测试
  5. 靠一套PPT上市估值120亿:新能源韭菜的自我修养
  6. 【论文阅读】Multi-Modal Sarcasm Detection Based on Contrastive Attention Mechanism
  7. excel表格同一单元格里删除重复词
  8. 滴滴入职要学位证吗学位证_我如何在没有技术学位或工作经验的情况下找到全职开发人员工作...
  9. 关于自动驾驶中毫米波雷达传感器的一些知识(涉及多传感器融合)
  10. cadence软件打开报错“计算机中丢失cdsCommon.dll”的解决办法