1 条题解

  • 0
    @ 2023-6-29 18:12:33

    并查集应用,只不过是字符串,用 map 维护即可。

    #include <bits/stdc++.h>
    using namespace std;
    string s,fa;
    map<string,string> f;
    string _find(string x){
        return x==f[x]?x:f[x]=_find(f[x]);
    }
    int main(){
        while (cin>>s&&s!="$"){
            string p="";
            for (int i=1;i<s.size();i++){//求真实人名
                p+=s[i];
            }
            if (s[0]=='#'){
                if (f.count(p)==0){
                    f[p]=p;
                }
                fa=_find(p);//提前将父亲的值设为其祖先
            }else if (s[0]=='+'){
                f[p]=fa;//这样就可以直接赋值
            }else{
                cout<<p<<' '<<_find(p)<<endl;
            }
        }
        return 0;
    }
    

    双倍经验

    • 1

    信息

    ID
    505
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    30
    已通过
    28
    上传者