代碼:
#include<bits/stdc++.h>
using namespace std;
vector<int> arr[100010];
int f[100010][22],dep[100010],fi[100010],dis,L;
void dfs(int u,int fa,int d){
dep[u]=d,f[u][0]=fa;
if(fa==1) fi[u]=u;
else fi[u]=fi[fa];
for(int i=1;i<=20;++i)
f[u][i]=f[f[u][i-1]][i-1];
for(auto v:arr[u])
if(v!=fa) dfs(v,u,d+1);
}
int LCA(int u,int v){
if(dep[u]<dep[v]) swap(u,v);
int d=dep[u]-dep[v];
for(int i=20;i>=0&&u!=v;--i)
if(d&(1<<i)) u=f[u][i];
if(u==v) return v;
for(int i=20;i>=0;--i)
if(f[u][i]!=f[v][i])
u=f[u][i],v=f[v][i];
return f[u][0];
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n,k;
cin>>n>>k;
for(int i=1;i<=n;++i) arr[i].clear();
for(int i=0;i<n-1;++i)
{
int x,y;
cin>>x>>y;
arr[x].push_back(y);
arr[y].push_back(x);
}
dfs(1,0,0);
while(k--)
{
int a,b,c;
cin>>a>>b>>c;
int l=LCA(b,c);
int dis=dep[b]+dep[c]-2*dep[l];
if(dep[a]<dis+dep[c]) puts("YES");
else
{
int temp=LCA(a,c);
if(dep[a]==dis+dep[c]&&temp!=1) puts("YES");
else puts("NO");
}
}
}
return 0;
}