20分求助
查看原帖
20分求助
1070431
ywtank楼主2024/10/21 19:55
#include <bits/stdc++.h>
using namespace std;
map<string,string> fa;
string find(string x,int &s){
    if(fa[x]==x)return x;
    s++;
    fa[x]=find(fa[x],s);
    return fa[x];
}
string find(string x){
    if(fa[x]==x)return x;
    fa[x]=find(fa[x]);
    return fa[x];
}
void cr(string i,string j){
    int i_s=0,j_s=0;
    string i_fa=find(i,i_s),j_fa=find(j,j_s);
    if(i_s<j_s){
        fa[i_fa]=j_fa;
    }else fa[j_fa]=i_fa;
}
int main(){
    int n,m;
    cin >> n >> m;
    for(int i=1;i<=n;i++){
        string s;
        getline(cin,s,'\n');
        fa[s]=s;
    }
    for(int i=1;i<=m;i++){
        string a,b;
        getline(cin,a,' ');
        getline(cin,b,'\n');
        cr(a,b);
    }
    int k;
    cin >> k;
    for(int i=1;i<=k;i++){
        string a,b;
        getline(cin,a,' ');
        getline(cin,b,'\n');
        //cout << a << ' ' << b << '\n';
        if(find(a)==find(b))cout << "Yes.\n";
        else cout << "No.\n";
    }
    return 0;
}                 

希望各位大佬帮忙看看

2024/10/21 19:55
加载中...