就对了测试点8、9(神奇)
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
int n,q;
int Head[maxn],Next[maxn<<1],to[maxn<<1],tot;
int k,anc[maxn][20],dep[maxn];
void add(int u,int v){
++tot;
Next[tot]=Head[u];
Head[u]=tot;
to[tot]=v;
}
void dfs(int u,int fa,int d){
dep[u]=d;anc[u][0]=fa;
for(int i=Head[u];i;i=Next[i]){
int v=to[i];
if(v==fa)continue;
dfs(v,u,d+1);
}
}
void doit(){
for(int u=1;u<=n;u++)
for(int i=1;i<=k;i++)anc[u][i]=anc[anc[u][i-1]][i-1];
}
int lca(int u,int v){
if(dep[u]<dep[v])swap(u,v);
for(int i=k;i>=0;i--)if(dep[anc[u][i]]>=dep[v])u=anc[u][i];
if(u==v)return u;
for(int i=k;i>=0;i--)if(anc[u][i]!=anc[v][i])u=anc[u][i],v=anc[v][i];
return anc[u][0];
}
int main()
{
scanf("%d%d",&n,&q);
k=log2(n);
for(int i=1;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
add(u,v);add(v,u);
}
dfs(1,1,0);
doit();
while(q--){
int i,j,k,t1,t2,t3;scanf("%d%d%d",&i,&j,&k);
t1=lca(i,j);t2=lca(j,k);t3=lca(i,k);
int all=dep[i]+dep[j]+dep[k]-dep[t1]-dep[t2]-dep[t3];
if(t1==t2&&t2==t3)printf("%d %d",t1,all);
else if(t1==t2)printf("%d %d",t3,all);
else if(t2==t3)printf("%d %d",t1,all);
else if(t1==t3)printf("%d %d",t2,all);
printf("\n");
}
return 0;
}