有很多操查询作,是可以用lca来快速解决的,下面我来记录几个。
模板:求树上两点间的距离
那么,不就是先把所有点到根节点的距离求出后,找一下这两点的lca,得到答案吗???
代码:
// 树上两点之间的距离,设两点为a,b,那么它们之间距离就是 dis[a]+dis[b]-2*dis[lca(a,b)]
#include <bits/stdc++.h>
using namespace std;
const int N=3e5+5;
int n,m,u,v,w,a,b,LCA;
int d[N],ff[N],dis[N],p[N][21];
int cnt,head[N];
struct edge{int next,to,w;}e[N<<1];
inline void add(int u,int v,int w)
{
cnt++;
e[cnt].next=head[u];
e[cnt].to=v;
e[cnt].w=w;
head[u]=cnt;
}
void dfs(int u,i