本地能过样例但全WA???
#include <stdio.h>
#include <string>
#include <map>
using namespace std;
map<string, int> Re;
map<int, string> Name;
int dad[10000];
void set()
{
for (int i = 0; i < 10000; i++)
{
dad[i] = i;
}
}
int find(int x)
{
if (dad[x] == x)
return x;
else
return dad[x] = find(dad[x]);
}
void merge(int i, int j)
{
dad[i] = find(dad[j]);
}
string read()
{
char temp;
string result = "";
temp = getchar();
while (true)
{
result += temp;
scanf("%c", &temp);
if (temp == '\n')
break;
}
return result;
}
void pri(string A)
{
for (int i = 0; i < A.size(); i++)
{
printf("%c", A[i]);
}
}
int main()
{
char way;
string name;
set();
int now = 1;
int now_d;
scanf("%c", &way);
for (;;)
{
if (way == '#')
{
name = read();
if (Re[name] == 0)
{
Name[now] = name;
Re[name] = now++;
}
now_d = Re[name];
scanf("%c", &way);
}
else if (way == '+')
{
name = read();
if (Re[name] == 0)
{
Name[now] = name;
Re[name] = now++;
}
merge(Re[name], now_d);
scanf("%c", &way);
}
else if (way == '?')
{
name = read();
pri(name);
printf(" ");
pri(Name[find(Re[name])]);
printf("\n");
scanf("%c", &way);
}
else
return 0;
}
return 0;
}