struct Edge{ int from, to, nex; }edge[N<<1]; int head[N], edgenum; void addedge(int u, int v){ Edge E = {u, v, head[u]}; edge[ edgenum ] = E; head[u] = edgenum ++; } inline int Max(int a,int b){return a>b?a:b;} int time; int deep[N<<1], ind…
题意:给定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 三.在线算法 (…