LCA(Tarjan)
program LCA(Tarjan);
type arr=record
u,v,w,next:longint;
end;
const maxn=;
maxm=;
var eg:array[..maxm*] of arr;
last,lasq,ans,fa:array[..maxn] of longint;
flag:array[..maxn] of boolean;
n,i,j,q,x,y:longint;
procedure add(u,v:longint);
begin
inc(j);
eg[j].u:=u;
eg[j].v:=v;
eg[j].next:=last[u];
last[u]:=j;
end;
procedure adt(u,v,w:longint);
begin
inc(j);
eg[j].u:=u;
eg[j].v:=v;
eg[j].w:=w;
eg[j].next:=last[u];
lasq[u]:=j;
end;
function find(x:longint):longint;
begin
if fa[x]=x then exit(x);
fa[x]:=find(fa[x]);
exit(fa[x]);
end;
procedure lca(u:longint);
var v,i:longint;
begin
i:=last[u];
while i<>- do
begin
v:=eg[i].v;
if not flag[v] then
begin
flag[v]:=true;
lca(v); fa[v]:=u;
end;
i:=eg[i].next;
end;
i:=lasq[u];
while i<>- do
begin
v:=eg[i].v;
if flag[v] and (ans[eg[i].w]=-) then
ans[eg[i].w]:=find(v);
i:=eg[i].next;
end;
end;
begin
for i:= to maxn do begin last[i]:=-; lasq[i]:=-; end;
j:=-;
readln(n,q);
for i:= to n- do
begin
readln(x,y);
add(x,y);
add(y,x);
end;
for i:= to q do
begin
readln(x,y);
adt(x,y,i);
adt(y,x,i);
ans[i]:=-;
end;
fillchar(flag,sizeof(flag),false);
for i:= to n do fa[i]:=i;
flag[]:=true;
lca();
for i:= to q do writeln(ans[i]);
end.
LCA(Tarjan)的更多相关文章
- LCA (Tarjan&倍增)
LCA_Tarjan 参考博客:https://www.cnblogs.com/JVxie/p/4854719.html LCA的Tarjan写法需要结合并查集 从叶子节点往上并 int Find ( ...
- LCA(tarjan)
这是LCA算法中的一种,Tarjan算法 其实这么说也有点不对,应该是Tarjan+DFS进行解决 LCA又称为最近公共祖先 那么什么是最近公共祖先: 在一棵没有环的树上,每个节点肯定有其父亲节点和祖 ...
- POJ 1986 Distance Queries 【输入YY && LCA(Tarjan离线)】
任意门:http://poj.org/problem?id=1986 Distance Queries Time Limit: 2000MS Memory Limit: 30000K Total ...
- LCA(Tarjan算法)模板
一.查询一组的LCA Nearest Common Ancestors A rooted tree is a well-known data structure in computer science ...
- H - Rescue the Princess ZOJ - 4097 (tarjan缩点+倍增lca)
题目链接: H - Rescue the Princess ZOJ - 4097 学习链接: zoj4097 Rescue the Princess无向图缩点有重边+lca - lhc..._博客园 ...
- LCA(最近公共祖先)--tarjan离线算法 hdu 2586
HDU 2586 How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- 最近公共祖先(LCA)---tarjan算法
LCA(最近公共祖先).....可惜我只会用tarjan去做 真心感觉tarjan算法要比倍增算法要好理解的多,可能是我脑子笨吧略略略 最近公共祖先概念:在一棵无环的树上寻找两个点在这棵树上深度最大的 ...
- Tarjan算法离线 求 LCA(最近公共祖先)
本文是网络资料整理或部分转载或部分原创,参考文章如下: https://www.cnblogs.com/JVxie/p/4854719.html http://blog.csdn.net/ywcpig ...
- POJ 1236 Network of Schools(tarjan算法 + LCA)
这个题目网上有很多答案,代码也很像,不排除我的.大家的思路应该都是taijan求出割边,然后找两个点的LCA(最近公共祖先),这两个点和LCA以及其他点构成了一个环,我们判断这个环上的割边有几条,我们 ...
随机推荐
- 10大html5前端框架
Bootstrap 首先说 Bootstrap,估计你也猜到会先说或者一定会有这个( 呵呵了 ),这是说明它的强大之处,拥有框架一壁江山的势气.自己刚入道的时候本着代码任何一个字母都得自己敲出来挡我者 ...
- 理解Servlet过滤器 (javax.servlet.Filter)
过滤器(Filter)的概念 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应. 在请求到达Servlet/JSP之前,过滤器截获请求. 在响应送给客户端之前,过滤器截获响 ...
- C++统计一段文字中各单词出现的频率
#include <iostream> using namespace std; /* run this program using the console pauser or add y ...
- 生JS实现jQuery的ready方法呢?下面是其中之一的做法:
function ready(fn){ if(document.addEventListener){ //标准浏览器 document.addEventListener('DOMConten ...
- js在mootools框架下的new Class
首先,在HTML文件中引入mootools.js. mootools-more.js.mootools-core.js,然后就能使用mootools封装的一些特性. 几乎类似于面向对象. mootoo ...
- soap
sudo apt-get update apt-get install php-soapphp-config --configure-options --enable-soap php -i | gr ...
- HDU 2255 二分图最佳匹配 模板题
题目大意: 给定每一个人能支付的房子价值,每个人最多且必须拥有一套房子,问最后分配房子可得到的最大收益 抄了个别人的KM模板,就这样了... #include <cstdio> #incl ...
- ios应用数据存储的常用方式 ios7.1应用沙盒
归档:用某种格式保存某个对象,又称持久化. 1XML 属性列表plist归档(持久化) 2Preference(偏好设置) 3NSKeyedArchiver归档 4SQLite3 5Core Data ...
- 解决python version 2.7 required,which was not find in the registry
程序自动写注册表 http://www.vvivv.com/post-143.html 手工写 http://blog.csdn.net/baikaishui525/article/details/9 ...
- hbase基本概念和hbase shell常用命令用法
1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...