对于三个点求最小路径长度和,答案肯定在某两个点的lca上,因为如果把集合点定在公共lca上,一定有两个点汇合后再一起上到lca,这样显然不如让剩下的那个点下来 这个lca可能是深度最深的--但是我懒得证了,反正只有三个lca,每个都求一遍然后取个max就好啦 #include<iostream> #include<cstdio> using namespace std; const int N=500005; int n,m,h[N],cnt,de[N],si[N],fa[N],h…
转换成抽象模型,就是要求一棵树(N个点,有N-1条边表示这个图是棵树)中某一点满足给定三点a,b,c到某一点的距离和最小.那么我们想到最近公共祖先的定义,推出只有集合点在LCA(a,b).LCA(a,c).LCA(b,c)中,才能保证距离和最近. # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # include <vector> #…