洛谷 P3379 【模板】最近公共祖先(LCA)Tarjan离线
- 这道题目WA无数发,最后还是参考了大神的blog
- 谁会想到因为一个输入外挂WA呢
- 大概是我的挂是假挂吧...orz(其实加上外挂,速度提升很多)
- 用链式前向星保存边的关系,同时为了节省空间也用前向星保存询问
- 注意要双向建边,同时dfs是先标记为访问状态
- 否则,会因为双向边的问题陷入死循环,或者改变了深搜的方向
#include <bits/stdc++.h>
using namespace std;
const int maxn = 500001;
const int maxm = 1000001;
struct enode {
int next,to;
} edges[maxm];
struct qnode {
int next,id,to;//id第几次查询
} que[maxm];
int head_e[maxn];//前向星 edges
int head_q[maxn];//前向星 查询
int vis[maxn];
int f[maxn];//并查集父亲数组
int res[maxn];//结果
int cnte=0;
int cntq=0;
int n,m,s;
inline void addedge(int u, int v) {
edges[cnte].to=v;
edges[cnte].next=head_e[u];
head_e[u]=cnte++;
}
inline void addque(int u, int v, int id) {
que[cntq].to=v;
que[cntq].id=id;
que[cntq].next=head_q[u];
head_q[u]=cntq++;
}
//并查集访问父亲
int find(int x) {
return x==f[x] ? x : f[x] = find(f[x]);//压缩
}
void tarjan(int s) {
vis[s]=1;//先标记,不能在回溯时标记,因为双向边
f[s]=s;
for(int i=head_e[s]; i!=-1; i=edges[i].next) {
if(!vis[edges[i].to]) {
tarjan(edges[i].to);
f[edges[i].to]=s;
}
}
for(int i=head_q[s]; i!=-1; i=que[i].next) {
if(vis[que[i].to]==1) {
res[que[i].id]=find(que[i].to);
}
}
}
inline void init() {
memset(vis,0,sizeof(vis));
memset(head_e,-1,sizeof(head_e));
memset(head_q,-1,sizeof(head_q));
for(int i=1; i<=n; ++i) f[i]=i;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>s;
init();
int u,v;
for(int i=1; i<n; ++i) {
cin>>v>>u;
addedge(v,u);
addedge(u,v);
}
for(int i=1; i<=m; ++i) {
cin>>v>>u;
addque(u,v,i);
addque(v,u,i);
}
tarjan(s);
for(int i=1; i<=m; ++i) cout<<res[i]<<endl;
return 0;
}
洛谷 P3379 【模板】最近公共祖先(LCA)Tarjan离线的更多相关文章
- 最近公共祖先LCA Tarjan 离线算法
[简介] 解决LCA问题的Tarjan算法利用并查集在一次DFS(深度优先遍历)中完成所有询问.换句话说,要所有询问都读入后才开始计算,所以是一种离线的算法. [原理] 先来看这样一个性质:当两个节点 ...
- [模板] 最近公共祖先/lca
简介 最近公共祖先 \(lca(a,b)\) 指的是a到根的路径和b到n的路径的深度最大的公共点. 定理. 以 \(r\) 为根的树上的路径 \((a,b) = (r,a) + (r,b) - 2 * ...
- 【树链剖分】洛谷P3379 树链剖分求LCA
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...
- POJ 1470 Closest Common Ancestors (最近公共祖先LCA 的离线算法Tarjan)
Tarjan算法的详细介绍,请戳: http://www.cnblogs.com/chenxiwenruo/p/3529533.html #include <iostream> #incl ...
- 最近公共祖先LCA(Tarjan算法)的思考和算法实现
LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 小广告:METO CODE 安溪一中信息学在线评测系统(OJ) //由于这是第一篇博客..有点瑕疵...比如我把false写成了f ...
- LCA最近公共祖先(Tarjan离线算法)
这篇博客对Tarjan算法的原理和过程模拟的很详细. 转载大佬的博客https://www.cnblogs.com/JVxie/p/4854719.html 第二次更新,之前转载的博客虽然胜在详细,但 ...
- LCA(最近公共祖先)--tarjan离线算法 hdu 2586
HDU 2586 How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- 最近公共祖先 LCA Tarjan算法
来自:http://www.cnblogs.com/ylfdrib/archive/2010/11/03/1867901.html 对于一棵有根树,就会有父亲结点,祖先结点,当然最近公共祖先就是这两个 ...
- 最近公共祖先LCA(Tarjan算法)的思考和算法实现——转载自Vendetta Blogs
LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 小广告:METO CODE 安溪一中信息学在线评测系统(OJ) //由于这是第一篇博客..有点瑕疵...比如我把false写成了f ...
- POJ1470Closest Common Ancestors 最近公共祖先LCA 的 离线算法 Tarjan
该算法的详细解释请戳: http://www.cnblogs.com/Findxiaoxun/p/3428516.html #include<cstdio> #include<alg ...
随机推荐
- 走进 Xamarin Test Recorder for Xamarin.Forms
此篇是承接之前 走进 UITest for Xamarin.Forms 的,所以如果没有看过之前的可以先看下之前的 UITest 比起上一篇纯敲代码只适合程序员的 UITest ,这一篇不管是程序员还 ...
- PhiloGL学习(5)——神说要有光,便有了光
前言 上一篇文章中介绍了如何创建三维对象及加载皮肤,本文为大家介绍如何为场景添加光源. 一. 原理分析 光在任何地方都是非常重要的,无论在哪里都说是要发光发热,光和热也是分不开的.光线分为点光源和线光 ...
- js实现一个简单钟表动画(javascript+html5 canvas)
第一次在博客园注册发博.有一次去人家单位开标,看到开标网站上有个钟表动画,一时兴起,就写了个简单的钟表动画. 用js和html5 canvas对象实现一个简单钟表程序 主要用到的就是h5的canvas ...
- 视频加载logo
最近工作需要,收集了一些视频卡顿或加载时的透明PNG图片.
- GCC(警告.优化以及调试选项)
GCC(警告.优化以及调试选项) [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 预处 ...
- Xilinx ISE 14.1利用Verilog产生clock
<一>建立如下的Verilog Module module myClock( input clock ); endmodule <二>建立 Verilog Test Fixtu ...
- 2015上海赛区B Binary Tree
B - Binary Tree Description The Old Frog King lives on the root of an infinite tree. According to ...
- Android 开发笔记___Intent的使用
public class ActRequestActivity extends AppCompatActivity implements OnClickListener { private EditT ...
- Nginx安装、平滑升级与虚拟机配置
Nginx 高性能HTTP反向代理服务器,也是 LAMP/POP3/SMTP代理服务器 由内核和模块组成,内核通过找配置文件讲客户端请求映射到一个location(location是Nginx配置中的 ...
- 【译】Asp.Net Identity Cookies 格式化-中英对照版
原文出处 Trailmax Tech Max Vasilyev: ASP.Net MVC development in Aberdeen, Scotland I've been reached out ...