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以及其他点构成了一个环,我们判断这个环上的割边有几条,我们 ...
随机推荐
- FG函数模块
ALDB: ABAP/4上的逻辑数据库 选择屏幕的修改更新 BUBA_4: ...
- 函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
在dllimport中加入CallingConvention参数就行了,[DllImport(PCAP_DLL, CharSet = CharSet.Auto, CallingConvention = ...
- [转]开发者需要了解的WebKit(mark)
以下内容转自:http://www.infoq.com/cn/articles/webkit-for-developers -------------------------------------- ...
- Excel VBA记录
-----------快捷键---------- 函数等提示(默认):ctrl+j 注释:上单引号' 设置单元格为空可以用:empty/null -----------基础语法--------- 基本 ...
- android应用程序如何调用支付宝接口(转)
最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...
- bzoj 2243: [SDOI2011]染色
#include<cstdio> #include<iostream> #define M 1000006 #define N 1000006 using namespace ...
- UVa 11021 - Tribles
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- 3.5电子书pc显示
使用svgalib 下载地址:https://launchpad.net/ubuntu/+source/svgalib/1:1.4.3-30svgalib_1.4.3.orig.tar.gzsvgal ...
- HTML参考
HTML Basic Document <html> <head> <title>Document name goes here</title> < ...
- 今年plan,做好四件事情
写代码, 写博客, 学英语, 锻炼身体.