#include<bits/stdc++.h>
using namespace std;
int n,q,d[500005],f[500005][20],sz[500005],tmp;
vector<int> e[500005];
void dfs(int u,int fa){d[u]=d[fa]+1,f[u][0]=fa;for(int x:e[u])if(x!=fa)dfs(x,u),sz[u]+=sz[x];}
int main(){
cin>>n>>q,sz[n]=1,tmp=n;
for(int i=1,u,v;i<n;i++)cin>>u>>v,e[u].push_back(v),e[v].push_back(u),sz[i]=1;
dfs(1,0);
for(int i=1;i<19;i++)for(int j=1;j<=n;j++)f[j][i]=f[f[j][i-1]][i-1];
while(q--){
int u,v,w,x,y,lca;
cin>>u>>v>>w,x=u,y=v;
if(x==y&&y==w){cout<<n<<"\n";continue;}
if(d[x]<d[y])swap(x,y);
for(int i=18;i>=0;i--)
if(d[x]-d[y]>>i&1)
lca=x=f[x][i];
if(x!=y){
for(int i=18;i>=0;i--)
if(f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
lca=f[x][0];
}
if((d[w]>d[u]&&d[w]>d[v])||d[w]<d[lca]){cout<<"0\n";continue;}
x=u,y=v;
for(int i=18;i>=0;i--)
if(d[x]-d[w]>>i&1)
x=f[x][i];
for(int i=18;i>=0;i--)
if(d[y]-d[w]>>i&1)
y=f[y][i];
if(x!=w&&y!=w)cout<<"0\n";
else if(w==lca){
y=u;
for(int i=18;i>=0;i--)
if(d[y]-d[w]-1>>i&1)
y=f[y][i];
n-=sz[y],x=v,y=w;
for(int i=18;i>=0;i--)
if(d[x]-d[w]-1>>i&1)
x=f[x][i];
cout<<n-sz[x]<<"\n",n=tmp;
}else if(x==w){
y=u;
for(int i=18;i>=0;i--)
if(d[y]-d[w]-1>>i&1)
y=f[y][i];
cout<<sz[w]-sz[y]<<"\n";
}else{
x=v;
for(int i=18;i>=0;i--)
if(d[x]-d[w]-1>>i&1)
x=f[x][i];
cout<<sz[w]-sz[x]<<"\n";
}
}
}
这份代码如果注释14行通过不了样例三的第3个询问,但能AC这道题