type arr=record v,nt:longint; end;
const maxn=; lx=;
var lt:array[..maxn] of longint;
eg:array[..maxn*] of arr;
d:array[..maxn] of longint;
g:array[..maxn,..lx] of longint;
n,i,x,y,a,b,sum:longint;
procedure swap(var a,b:longint);
var c:longint;
begin
c:=a; a:=b; b:=c;
end;
procedure add(x,y:longint);
begin
inc(sum); eg[sum].nt:=lt[x]; eg[sum].v:=y; lt[x]:=sum;
end;
procedure Tinit(x,fa:longint);
var i:longint;
begin
g[x,]:=fa; d[x]:=d[fa]+;
for i:= to lx do
g[x,i]:=g[g[x,i-],i-];
i:=lt[x];
while i<> do
begin
if eg[i].v<>fa then Tinit(eg[i].v,x);
i:=eg[i].nt;
end;
end;
function Tlca(x,y:longint):longint;
var dep,i:longint;
begin
if d[x]<d[y] then swap(x,y);
dep:=d[x]-d[y];
for i:= to lx- do
if dep and (<<i) > then
x:=g[x,i];
if x=y then exit(x);
for i:=lx- downto do
if g[x,i]<>g[y,i] then
begin
x:=g[x,i];
y:=g[y,i];
end;
exit(g[x][]);
end;
function Tdist(x,y:longint):longint;
begin
exit(d[x]+d[y]-d[Tlca(x,y)]*);
end;
begin
readln(n,a,b);
sum:=;
while not eof do
begin
read(x);
while not eoln do
begin
read(y);
add(x,y);
add(y,x);
end;
readln;
end;
Tinit(,);
writeln(Tlca(a,b));
writeln(Tdist(a,b));
end.

LCA(倍增)的更多相关文章

  1. 【codevs2370】小机房的树 LCA 倍增

    2370 小机房的树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0 ...

  2. LCA倍增算法

    LCA 算法是一个技巧性很强的算法. 十分感谢月老提供的模板. 这里我实现LCA是通过倍增,其实就是二进制优化. 任何一个数都可以有2的阶数实现 例如16可以由1 2 4 8组合得到 5可以由1 2 ...

  3. 洛谷 3379 最近公共祖先(LCA 倍增)

    洛谷 3379 最近公共祖先(LCA 倍增) 题意分析 裸的板子题,但是注意这题n上限50w,我用的边表,所以要开到100w才能过,一开始re了两发,发现这个问题了. 代码总览 #include &l ...

  4. CodeVs.2370 小机房的树 ( LCA 倍增 最近公共祖先)

    CodeVs.2370 小机房的树 ( LCA 倍增 最近公共祖先) 题意分析 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天, ...

  5. POJ.1986 Distance Queries ( LCA 倍增 )

    POJ.1986 Distance Queries ( LCA 倍增 ) 题意分析 给出一个N个点,M条边的信息(u,v,w),表示树上u-v有一条边,边权为w,接下来有k个询问,每个询问为(a,b) ...

  6. POJ.1330 Nearest Common Ancestors (LCA 倍增)

    POJ.1330 Nearest Common Ancestors (LCA 倍增) 题意分析 给出一棵树,树上有n个点(n-1)条边,n-1个父子的边的关系a-b.接下来给出xy,求出xy的lca节 ...

  7. LCA(倍增在线算法) codevs 2370 小机房的树

    codevs 2370 小机房的树 时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点, ...

  8. LCA(最近公共祖先)——LCA倍增法

    一.前人种树 博客:最近公共祖先 LCA 倍增法 博客:浅谈倍增法求LCA 二.沙场练兵 题目:POJ 1330 Nearest Common Ancestors 代码: const int MAXN ...

  9. POJ - 1330 Nearest Common Ancestors(dfs+ST在线算法|LCA倍增法)

    1.输入树中的节点数N,输入树中的N-1条边.最后输入2个点,输出它们的最近公共祖先. 2.裸的最近公共祖先. 3. dfs+ST在线算法: /* LCA(POJ 1330) 在线算法 DFS+ST ...

  10. 次小生成树(LCA倍增)

    算法: 求出MST之后枚举每条在MST之外的边 连上之后会出现环 找到环中除加上的边之外权值最大的边 删除该边之后得到一颗新树 做法: 利用LCA倍增地维护最小生成树上两点之间的最大边权 每次枚举在M ...

随机推荐

  1. java二维数组简单初步理解

    二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”. int[][] arr = {{1, 2, 3}, {4, 5, 6}}; System.out.println(arr[0][ ...

  2. 创建交货单/外向交货BAPI_OUTB_DELIVERY_CREATE_SLS/STO

    FUNCTION Z_SD_CREATE_DN. *"-------------------------------------------------------------------- ...

  3. 循环语句while与for的穷举迭代

    循环语句while while当...的时候 int n=1; while(n<6)//在括号内直接限制逻辑关系 {//需要在大括号内给出改变方式,否则将进入死循环 console.WriteL ...

  4. firefox hack

    @-moz-document url-prefix(){ css选择器 { css样式设置 } }

  5. 转载 Javascript继承两种形式详解

    一直想对Javascript再次做一些总结,正好最近自己写了一个小型Js UI库,总结了一下Js的继承机制,在网上也看了一些前辈们博客里的总结,感觉分析不是特别全面.这里仅仅是把自己的学习体会拿出来分 ...

  6. .net调用存储过程碰到的一个问题

    问题描述 报错信息如下: Execution of user code in the .NET Framework is disabled. Enable "clr enabled" ...

  7. 微信浏览器——User Agent

    在iPhone 返回 Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gec ...

  8. 判断子元素(or属性)是否存在

    if(typeof($("#aid").attr("rel"))=="undefined") 即可

  9. JS访问剪切板中的图片

    google出来一个html2canvas,它利用canvas来渲染读取的DOM树,也就是说它只能截取document里的内容,如果要像qq截图那样,应该怎么做?用过百度的Ueditor编辑器的朋友都 ...

  10. 百度上传android包:应用名解析失败!

    manifest 里面<application增加android:label="@string/app_name"