不知道为啥会 mle。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define db double
#define ld long double
#define M 20005
#define N 2000005
#define mod 1000000007
#define inf 1e9
#define dinf 1e15
#define linf 1e18+7
#define eps 1e-15
#define delta 0.997
int n,m,q;
vector<int> e[M];
int dfnn[M],low[M],idx,fat[M];
int cut[M];
int lx[M],cnt;
vector<int> g[M];
void tarjan(int u){
dfnn[u]=low[u]=++idx;
int sum=0;
for(auto v:e[u]){
if(!dfnn[v]){
++sum;
fat[v]=u;
tarjan(v);
low[u]=min(low[u],low[v]);
if(fat[u]!=u&&low[v]>=dfnn[u]) cut[u]=1;
} else low[u]=min(low[u],dfnn[v]);
}
if(sum>1&&fat[u]==u) cut[u]=1;
}
void change(int u){
lx[u]=cnt;
for(auto v:e[u]) if(!lx[v]&&!cut[v]) change(v);
}
unordered_map<int,int> vis[M];
int hson[M],siz[M],fa[M],dep[M];
int top[M],dfn[M],rk[M],tot;
void dfs1(int u,int f,int pos){
hson[u]=-1;
siz[u]=1;
fa[u]=f;
dep[u]=pos;
for(auto v:g[u]){
if(v==f) continue;
dfs1(v,u,pos+1);
siz[u]+=siz[v];
if(!~hson[u]||siz[hson[u]]<siz[v]) hson[u]=v;
}
}
void dfs2(int u,int tp){
top[u]=tp;
dfn[u]=++tot;
rk[tot]=u;
if(!~hson[u]) return;
dfs2(hson[u],tp);
for(auto v:g[u]){
if(v==fa[u]||v==hson[u]) continue;
dfs2(v,v);
}
}
bool chk(int u,int v,int x){
while(top[u]!=top[v]){
if(dep[top[u]]<dep[top[v]]) swap(u,v);
if(dfn[top[u]]<=dfn[x]&&dfn[x]<=dfn[u]) return 1;
u=fa[top[u]];
}
if(dep[u]>dep[v]) swap(u,v);
return dfn[u]<=dfn[x]&&dfn[x]<=dfn[v];
}
int main(){
scanf("%d %d",&n,&m);
while(m--){
int u,v;
scanf("%d %d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
fat[1]=1;
tarjan(1);
for(int i=1;i<=n;++i){
if(lx[i]) continue;
++cnt;
if(cut[i]){
lx[i]=cnt;
continue;
}
change(i);
}
// for(int i=1;i<=n;++i) printf("%d%c",lx[i],i==n?'\n':' '); byd 破防了
for(int u=1;u<=n;++u){
for(auto v:e[u]){
if(lx[u]==lx[v]||vis[lx[u]].count(lx[v])) continue;
g[lx[u]].push_back(lx[v]);
vis[lx[u]][lx[v]]=1;
}
}
dfs1(1,0,1);
dfs2(1,1);
scanf("%d",&q);
while(q--){
int u,v,x;
scanf("%d %d %d",&u,&v,&x);
if(!cut[x]){
printf("no\n");
continue;
}
u=lx[u]; v=lx[v]; x=lx[x];
if(chk(u,v,x)) printf("yes\n");
else printf("no\n");
}
return 0;
}