const lx=;
xh=;
var L,p,nt:array[..lx*] of longint;
lt,dfn,fr,dep:array[..lx] of longint;
f:array[..lx*,..xh] of longint;
vis:array[..lx] of boolean;
i,x,y,n,sum,q:longint;
procedure swap(var a,b:longint);
var c:longint;
begin
c:=a; a:=b; b:=c;
end;
procedure dfs(u:longint);
var i,v:longint;
begin
inc(sum); dfn[u]:=sum; vis[u]:=true;
inc(L[]); L[L[]]:=u;
fr[u]:=L[];
i:=lt[u];
while i<> do
begin
v:=p[i];
if not vis[v] then
begin
dep[v]:=dep[u]+;
dfs(v);
inc(L[]); L[L[]]:=u;
end;
i:=nt[i];
end;
end;
procedure prepare;
var i,j:longint;
begin
fillchar(fr,sizeof(fr),);
fillchar(vis,sizeof(vis),false);
fillchar(L,sizeof(L),);
sum:=;
dep[]:=;
dfs();
for i:= to L[] do f[i,]:=L[i];
for i:= to xh do
for j:= to L[] do
if j+<<i-<=L[] then
if dfn[f[j,i-]]<dfn[f[j+<<(i-),i-]] then f[j,i]:=f[j,i-]
else f[j,i]:=f[j+<<(i-),i-];
end;
procedure add(x,y:longint);
begin
inc(sum); p[sum]:=y; nt[sum]:=lt[x]; lt[x]:=sum;
end;
function find(s,t:longint):longint;
var k:longint;
begin
s:=fr[s]; t:=fr[t];
if s>t then swap(s,t);
k:=trunc(ln(t-s+)/ln());
if dfn[f[s,k]]<dfn[f[t-<<k+,k]] then exit(f[s,k]) else exit(f[t-<<k+,k]);
end;
function dis(s,t:longint):longint;
var k:longint;
begin
k:=find(s,t);
exit(dep[t]-dep[k]+dep[s]-dep[k]);
end;
begin
readln(n);
fillchar(lt,sizeof(lt),);
sum:=;
for i:= to n- do
begin
readln(x,y);
add(x,y);
add(y,x);
end;
prepare; end.

LCA(RMQ)的更多相关文章

  1. ST(RMQ)算法(在线)求LCA

    在此之前,我写过另一篇博客,是倍增(在线)求LCA.有兴趣的同学可以去看一看.概念以及各种暴力就不在这里说了,那篇博客已经有介绍了. 不会ST算法的同学点这里 ST(RMQ)算法在线求LCA 这个算法 ...

  2. 【51NOD1766】树上的最远点对(线段树,LCA,RMQ)

    题意:n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间, 表示点的标号请你求出两个区间内各选一点之间的最大距离,即你需要求出max{dis(i,j) |a<=i<=b,c< ...

  3. nyoj 119 士兵杀敌(三)(RMQ)

    士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进 ...

  4. hdu 3183 A Magic Lamp(RMQ)

    A Magic Lamp                                                                               Time Limi ...

  5. Balanced Lineup(RMQ)

    原题传送门 就是裸RMQ啊.. 求区间最大值和区间最小值,一看就像RMQ,当然线段树貌似也可以. 至于算法嘛.自己学~(好吧,放个传送门...) 然后就是最后把maxsum-minsum就好啦233~ ...

  6. UVA-11235 Frequent values (RMQ)

    题目大意:在一个长度为n的不降序列中,有m次询问,每次询问(i,j)表示在区间(i,j)中找出出现次数最多的元素的出现次数. 题目分析:因为序列有序,可以将序列分段,并且记录每段的元素个数.每一个元素 ...

  7. UVa11235 FrequentValues(RMQ)

    Problem F: Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasi ...

  8. 【暑假】[实用数据结构]范围最小值问题(RMQ)

    范围最小值问题: 提供操作: Query(L,R):计算min{AL ~ AR } Sparse-Table算法: 定义d[i][j]为从i开始长度为2j的一段元素的最小值.所以可以用递推的方法表示. ...

  9. UVA 11235 Frequent values(RMQ)

    Frequent values TimeLimit:3000Ms , ... , an in non-decreasing order. In addition to that, you are gi ...

随机推荐

  1. 使用 Fresco加载图片

    概念: ImagePipeline ——负责从网络.本地图片.Content Provider(内容提供者)或者本地资源那里获取图片,压缩保存在本地存储中和在内存中保存为压缩的图片 Drawee——处 ...

  2. 串口调试,提示the given port name does not start with COM/com异常解决办法,,发现是打印机在搞怪

    串口测试时,用到串口,把打印机的拔下来,换上测试的,程序一打开就提示错误:the given port name does not start with COM/com or does not res ...

  3. class、interface、struct的区别

    1 struct和class有什么区别 1.1默认的继承访问权限 Struct是public的,class是private的. 你可以写如下的代码: struct A { char a; }; str ...

  4. JDicom使用指南

    适用条件本指南用于使用JDicom进行环境模拟.产品调试. 一.安装JDicom运行JDicom安装程序之前,需安装JRE 1.3及以上版本.否则,弹出如下图所示报错 安装JRE 1.4:双击运行可执 ...

  5. input 中的enabled与disabled属性

    <style type="text/css"> *{ padding:; margin:; list-style-type: none; box-sizing:bord ...

  6. linux tar 增量备份命令

    tar --newer-mtime "2013-09-17 00:00:00"   -zcvf /var/www/good.tar.gz    spider/

  7. java 访问活动目录代码

    package demo; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnu ...

  8. PHP+mysql常用类库

    <?php /** * @title: Ekcms mysql类库 * @version: 1.0 * @author: perry <perry@1kyou.com> * @pub ...

  9. netbios wins dns LLMNR

    NetBIOS名称 Network Basic Input/Output System  (RFC-1001,1002)网络基本输入/输出系统协议 NetBIOS是一种高级网络接口,最初是在硬件中实 ...

  10. POJ 1328 Radar Installation 贪心 难度:1

    http://poj.org/problem?id=1328 思路: 1.肯定y大于d的情况下答案为-1,其他时候必定有非负整数解 2.x,y同时考虑是较为麻烦的,想办法消掉y,用d^2-y^2获得圆 ...