RT,map+并查集,求调。
#include <bits/stdc++.h>
using namespace std;
const int N=2e4+10;
map<string,string> fa;
int n,m,k;
string find(string s){
if(fa[s]==s) return s;
return fa[s]=find(fa[s]);
}
void merge(string s1,string s2){
fa[find(s2)] = find(s1);
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
string s;
scanf("%s",&s);
fa[s] = s;
}
for(int i=1;i<=m;i++){
string s1,s2;
scanf("%s %s",&s1,&s2);
merge(s1,s2);
}
scanf("%d",&k);
for(int i=1;i<=k;i++){
string s1,s2;
scanf("%s %s",&s1,&s2);
if(find(s1)==find(s2)) printf("Yes.\n");
else printf("No.\n");
}
return 0;
}