RT,加cin优化及开O2
#include <iostream>
#include <map>
#define endl "\n"
const int N = 100100;
using namespace std;
char ch;
int fa[N], idx;
string q, s1, s2, que[N];
int query(string s)
{
for (int i = 1; i <= idx; i ++ )
{
if (que[i] == s) return i;
}
que[++ idx] = s;
return idx;
}
int find(int x)
{
if (fa[x] != x) fa[x] = find(fa[x]);
return fa[x];
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
for (int i = 1; i <= 50000; i ++ ) fa[i] = i;
do
{
cin >> ch;
if (ch == '#') cin >> s1;
else if (ch == '+')
{
cin >> s2;
fa[find(query(s2))] = find(query(s1));
}
else if (ch == '?')
{
cin >> q;
cout << q << " " << que[find(query(q))] << endl;
}
}while (ch != '$');
}