似乎应该是LCA没求好
#include<bits/stdc++.h>
#define N 100050
using namespace std;
inline int read()
{
int x=0;
char c=getchar();
while(c>'9'||c<'0') c=getchar();
while(c>='0'&&c<='9')
{
x=x*10+c-'0';
c=getchar();
}
return x;
}
int n,q,dep[N],anc[N][19];
vector<int> G[N];
void dfs(int u,int f)
{
dep[u]=dep[f]+1;
anc[u][0]=f;
for(int i=1;i<=19;i++)
anc[u][i]=anc[anc[u][i-1]][i-1];
for(int i=0;i<G[u].size();i++)
{
if(G[u][i]==f) continue;
dfs(G[u][i],u);
}
}
inline int LAC(int x,int y)
{
if(dep[x]<dep[y]) swap(x,y);
for(int i=19;i>=0;i--)
if(dep[anc[x][i]]>=dep[y]) x=anc[x][i];
if(x==y) return x;
for(int i=19;i>=0;i--)
if(anc[x][i]!=anc[y][i])
{x=anc[x][i];y=anc[y][i];}
return anc[x][0];
}
int main()
{
n=read();q=read();
int u,v;
for(int i=1;i<n;i++)
{
u=read();v=read();
G[u].push_back(v);
G[v].push_back(u);
}
dfs(1,1);
int a,b,c,d;
while(q--)
{
a=read();b=read();c=read();d=read();
int s1=LAC(a,b),s2=LAC(c,d);
if(s1 < s2)
{swap(s1,s2);swap(a,c);swap(b,d);}
if((LAC(s1,c)==s1||LAC(s1,d)==s1))
puts("Y");
else puts("N");
}
}