萌新不解
  • 板块P2814 家谱
  • 楼主xibaohe
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/10/28 19:07
  • 上次更新2023/11/2 11:01:42
查看原帖
萌新不解
601747
xibaohe楼主2023/10/28 19:07

以下代码是会WA的(直接套模板):

#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
using namespace std;
#define endl '\n'
char op;
string x,y,z;
map<string,string>f;
string find(string x)
{
	return x==f[x]?x:f[x]=find(f[x]);
}
void merge(string x,string y)
{
	f[find(x)]=find(y);
	return;
}
int main(){
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	while(cin>>op)
	{
		if(op=='$') return 0;
		if(op=='#')
		{
			cin>>x;
			if(f.count(x)==0) f[x]=x;
		}
		if(op=='+')
		{
			cin>>y;
			merge(y,x);
		}
		if(op=='?')
		{
			cin>>z;
			cout<<z<<" "<<find(z)<<endl;
		}
	}
	return 0;
}

但将模板中的merge函数改成如下:

void merge(string x,string y)
{
	f[x]=y;
	return;
}

就可以AC了,这是为什么呢?

2023/10/28 19:07
加载中...