#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,m,r,u,v,f[N][32],d[N],Q[N],c[N];
vector<int>a[N];
void bfs(int A){
memset(c,-1,sizeof(c));
int h=0,t=0;
c[A]=0;
Q[t++]=A;
while(h<t){
int u=Q[h++];
for(int i=0;i<a[u].size();i++){
int v=a[u][i];
if(c[v]==-1){
c[v]=c[u]+1;
Q[t++]=v;
}
}
}
}
void dfs(int u,int u_d){
for(int i=1;i<25;i++){
f[u][i]=f[f[u][i-1]][i-1];
}
d[u]=u_d;
for(auto s:a[u]){
if(s!=f[u][0]){
f[s][0]=u;
dfs(s,u_d+1);
}
}
}
int lca(int x,int y){
if(d[x]>d[y]) swap(x,y);
for(int i=25;i+1;i--){
if((d[y]-d[x])&(1<<i)) y=f[y][i];
}
for(int i=25;i+1;i--){
if(f[x][i]!=f[y][i]){
x=f[x][i];
y=f[y][i];
}
}
if(x==y) return x;
else return f[x][0];
}
int main(){
cin>>n>>m;
for(int i=1;i<=n-1;i++){
cin>>u>>v;
a[u].push_back(v);
a[v].push_back(u);
}
dfs(1,1);
for(int i=1;i<=m;i++){
int x,y,z,dx,dy,dz,dm,ans,S;
cin>>x>>y>>z;
dx=lca(x,y);dy=lca(y,z);dz=lca(z,x);
dm=d[dx];ans=dx;
if(d[dy]>dm) dm=d[dy],ans=dy;
if(d[dz]>dm) dm=d[dz],ans=dz;
bfs(ans);
S=c[x]+c[y]+c[z];
cout<<dm<<" "<<S<<endl;
}
return 0;
}
看了题解的思路,但阳历都没过