#2 RE 的代码
#include<bits/stdc++.h>
using namespace std;
struct node{
string name;
int num;
}fa[2000001];
int f(int x){
if(fa[x].num==x)return x;
else{
fa[x].num=f(fa[x].num);
return fa[x].num;
}
}
int find(string s){
int ans=0;
for(int i=1;i<=20001;i++)
if(s==fa[i].name)return i;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
fa[i].num=i;
cin>>fa[i].name;
}
for(int i=1;i<=m;i++){
string name1,name2;
cin>>name1>>name2;
int u=find(name1);
int v=find(name2);
int uu=f(fa[u].num);
int vv=f(fa[v].num);
if(uu!=vv)
fa[uu].num=vv;
}
int k;
scanf("%d",&k);
for(int i=1;i<=k;i++){
string name1,name2;
cin>>name1>>name2;
int u=find(name1);
int v=find(name2);
int uu=f(fa[u].num);
int vv=f(fa[v].num);
if(uu!=vv) printf("No.\n");
else printf("Yes.\n");
}
return 0;
}
AC的代码
#include<bits/stdc++.h>
using namespace std;
struct node{
string name;
int num;
}fa[2000001];
int f(int x){
if(fa[x].num==x)return x;
else{
fa[x].num=f(fa[x].num);
return fa[x].num;
}
}
int find(string s){
int ans=0;
for(int i=1;i<=20001;i++)
if(s==fa[i].name)return i;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
fa[i].num=i;
cin>>fa[i].name;
}
for(int i=1;i<=m;i++){
string n1,n2;
cin>>n1>>n2;
int u=find(n1);
int v=find(n2);
int uu=f(fa[u].num);
int vv=f(fa[v].num);
if(uu!=vv)
fa[uu].num=vv;
}
int k;
cin>>k;
for(int i=1;i<=k;i++){
string n1,n2;
cin>>n1>>n2;
int u=find(n1);
int v=find(n2);
int uu=f(fa[u].num);
int vv=f(fa[v].num);
if(uu!=vv) printf("No.\n");
else printf("Yes.\n");
}
return 0;
}
···