参考博客 仔细想一想:最近的公共祖先,其实,搜索时回朔,连通这两点,那深度最低肯定是最近的公共祖先啊. 那这样就可以变成RMQ问题了. #include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> using namespace std; ; int ip,tot; struct Tree{//树 int to; int next; int v; }; ]; int f…
题意:给定n个点,下面n-1行 u , v ,dis 表示一条无向边和边权值,这里给了一颗无向树 下面m表示m个询问,问 u v n 三点最短距离 典型的LCA转RMQ #include<stdio.h> #include<string.h> #include<math.h> #define N 100000 #define INF 1<<29 #define Logo 17 using namespace std; inline int Min(int a…
一.什么是LCA? LCA:Least Common Ancestors(最近公共祖先),对于一棵有根树T的任意两个节点u,v,求出LCA(T, u, v),即离跟最远的节点x,使得x同时是u和v的祖先. 二.算法分类 求LCA的算法很多,按照是否在线可以分为在线算法和离线算法. 在线算法:用比较长的时间做预处理,但是等信息充足以后每次回答询问只需要用比较少的时间. 离线算法:先把所有的询问读入,然后一起把所有询问回答完成,不是本文所讲,Click here 三.在线算法 (…