调了好久了,一直莫名re,求助
  • 板块P2814 家谱
  • 楼主忘れ潮
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/8/18 12:17
  • 上次更新2023/11/4 10:13:27
查看原帖
调了好久了,一直莫名re,求助
231769
忘れ潮楼主2021/8/18 12:17
#include <bits/stdc++.h>
using namespace std;
string k, t[1005], s[50005];
char c;
int num, cnt, txt, fa[50005];
int find(int x){
	return x == fa[x] ? x : find(fa[x]);
}
int main(){
	for(int i = 1; i <= 50001; i++)
		fa[i] = i;
	c = getchar();
	while(c != '?'){
		if(c == '#') cin>>t[++txt];
		else{
			cin>>s[++cnt];
			fa[cnt] = txt;
		}
		getchar();
		c = getchar();	
	}
	for(int i = 1; i <= txt; i++){
		int p = 0;
		for(int j = 1; j <= cnt; j++)
			if(s[j] == t[i]){
				p = j;
				break;
			}
		if(!p){
			s[++cnt] = t[i];
			p = cnt;
		}
		for(int j = 1; j <= cnt; j++)
			if(fa[j] == i) fa[j] = p;
	}
	while(c != '$'){
		cin>>k;
		for(int i = 1; i <= cnt; i++)
			if(k == s[i]){
				num = i;
				break;
			}
		int temp = find(num);
		cout<<k<<' '<<s[temp]<<endl;
		getchar();
		c = getchar();
	}
	return 0;
} 
2021/8/18 12:17
加载中...