题目: 传送门
思路: 用unordered_map<string, string> pre;保存父节点,就和int pre[];一样,不过这里是用stl的unordered_map自动的hash把字符串变成了整数(unordered_map比map快),然后套模板就行了
Code:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
unordered_map<string, string> pre;
string fa, son, tmp;
string find(string s) {
if (s == pre[s]) return s;
return pre[s] = find(pre[s]);
}
void merge() {
string ffa = find(fa), fson(son);
if (ffa != fson) pre[fson] = ffa;
}
int main()
{
char op;
while ((op = getchar()) != '$') {
if (op == '#') {
cin>>fa;
if (pre[fa] == "") pre[fa] = fa;
} else if (op == '+') {
cin>>son;
merge();
} else if (op == '?') {
cin>>tmp;
cout<<tmp<<" "<<find(tmp)<<endl;
}
}
return 0;
}
ps:以后找机会自己学着写个hash