以下两份代码除了输入不同没有其他差别,但一个AC,一个WA。
AC的:
#include <iostream>
#include <string>
#include <map>
using namespace std;
map <string, string> f;
string find(string name)
{
return (f[name] == name) ? name : f[name] = find(f[name]);
}
int main()
{
char c;
string name, s;
while (c = getchar())
{
if (c == '$')
{
break;
}
else if (c == '#')
{
cin >> name;
if (find(name) == "")
{
f[name] = name;
}
else
{
f[name] = find(name);
}
}
else if (c == '+')
{
cin >> s;
f[s] = f[name];
}
else if (c == '?')
{
cin >> s;
cout << s << " " << find(f[s]) << "\n";
}
}
return 0;
}
WA的:
#include <iostream>
#include <string>
#include <map>
using namespace std;
map <string, string> f;
string find(string name)
{
return (f[name] == name) ? name : f[name] = find(f[name]);
}
int main()
{
char c;
string name, s;
while (c = getchar())
{
if (c == '$')
{
break;
}
else if (c == '#')
{
getline(cin, name);
if (find(name) == "")
{
f[name] = name;
}
else
{
f[name] = find(name);
}
}
else if (c == '+')
{
getline(cin, s);
f[s] = f[name];
}
else if (c == '?')
{
getline(cin, s);
cout << s << " " << find(f[s]) << "\n";
}
}
return 0;
}
提交记录: https://www.luogu.com.cn/record/76729155 https://www.luogu.com.cn/record/76730251