dalao的tajan模板
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模板相关推荐
- 2019牛客暑期多校训练营(第三场) - D - Big Integer - 数论
https://ac.nowcoder.com/acm/contest/883/D \(A(n)\) 是由n个1组成的一个整数. 第一步:把 \(A(n)\) 表示为 \(\frac{10^n-1}{ ...
- 一些dalao的模板
费用流(MCMF)这东西很早之前就想写了--但是一直慵懒. 在最大流找增广路的过程中,同时要求了最小费用, 那么我们找的增广路就找费用最小的那一条. 一般最小费用流的"费用"形式是 ...
- luogu P3379 【模板】最近公共祖先(LCA)
lca最近公共祖先,是指两个点最近的祖先节点:求lca我知道的有三种倍增, st表,tarjan,我要介绍的是倍增,我才不会告诉你我只会这一个. 话说我学lca可真的路途曲折,在qbxt,lcy da ...
- [FFT/IFFT]快速傅里叶(逆)变化 + 递归和递推模板
现在时间是2021-2-2,重新回来看2019学习的一知半解的FFTFFTFFT,又有了新的理解 所以修改了以往写过的文章,并增添些许内容 因为过去一年多,上了高中,学的知识多了些,以前不懂的有些东西 ...
- 【网络流】最大流问题(EK算法带模板,Dinic算法带模板及弧优化,ISAP算法带模板及弧优化)上下界网络流
本blog重点是代码 网络流的相关概念 流网络(flow network) 流(flow) 网络的流 残留网络(residual network) 增广路径(augmenting path) Edmo ...
- 【模板】高精度 [高精度]
相当于把各种运算人工模拟一遍,还是很好理解的 参照的是这个dalao的模板 (感觉全机房的都用的这个模板)理解了就差不多了 一些我犯过的错误还有注意的地方 小于的比较要从高位到低位比较 1 #de ...
- python 格式化字符串 模板字符串(五分钟读懂)
格式化字符串 模板字符串 在python字符串最核心的功能 # %s 字符串 占位符 获取传入对象的__str__方法的返回值,并将其格式化到指定位置 # %d 数字整数 占位符 将整数.浮点数转换成 ...
- dalao自动报表邮件2.0
经过昨天的修改优化后,dalao收到了不是"木马"的邮件,欣慰地点了点头,"不错,不错,这几张表设计的简洁明了,看着有货!不过呀,,,这些表的数据太多了一点,十几天的数据 ...
- 解方程 ( 迭代法/牛顿迭代/高斯消元 ) 详解及模板
欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/--萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗-- 一.迭代法解方程 ( ...
最新文章
- Ubuntu上使终端显示Git分支(oh-my-zsh)
- 一位中科院自动化所博士毕业论文的致谢:二十二载风雨求学路,他把自己活成了光.........
- mysql count() 写法,MySQL COUNT()用法及代碼示例
- linux 内核升级 网络 不能上网,Deepin Linux 无法上网
- java 自定义消息_Vc中自定义消息及其触发使用
- js网页返回页面顶部的小方法
- 音频降噪处理+java_适当的音频捕获和降噪
- COS系统的前端演变和发展
- POJ 1804 Brainman (归并排序 -- 求逆序对数)
- java 计算反码_java基础知识-原码、反码、补码、运算符
- cas单点注销失败Error Sending message to url endpoint
- 【2019杭电多校第五场1002=HDU6625】three arrays(01字典树+思维+贪心)
- 《程序设计导引及在线实践》开始
- 第一章、Zigbee模块的简介及特点
- 八皇后问题 (25分)
- 企业网站建设流程是什么?三个流程要知道
- php 支付宝退款40004,接入支付宝支付 错误码4000,排查方法——开发记录
- Java邮件发送基于springboot实现
- round函数与roundup函数
- 安卓手机便签怎么快速修改重复提醒设置?
热门文章
- 蓝桥杯(李白喝酒Java)
- 软著申请需要多少钱?大概需要多久?
- 10.27 正睿提高9
- linux驱动程序的测试,Linux驱动学习笔记(4)字符设备驱动测试
- 靠一套PPT上市估值120亿:新能源韭菜的自我修养
- 【论文阅读】Multi-Modal Sarcasm Detection Based on Contrastive Attention Mechanism
- excel表格同一单元格里删除重复词
- 滴滴入职要学位证吗学位证_我如何在没有技术学位或工作经验的情况下找到全职开发人员工作...
- 关于自动驾驶中毫米波雷达传感器的一些知识(涉及多传感器融合)
- cadence软件打开报错“计算机中丢失cdsCommon.dll”的解决办法