所有点不知道为什么全部超时
  • 板块P2814 家谱
  • 楼主li2974361459
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/2/8 00:32
  • 上次更新2025/2/8 11:06:34
查看原帖
所有点不知道为什么全部超时
1541309
li2974361459楼主2025/2/8 00:32
#include<iostream>
#include<string>
#include<map>
using namespace std;
map<string, int> mp;
map<int, string> mp2;
int s[50004];
void init() {
	for (int i = 1; i <= 50003; i++) {
		s[i] = i;
	}
}
int find_set(int x) {
	if (x != s[x]) {
		s[x] = find_set(s[x]);
	}
	return s[x];
}
int main() {
	init();
	char type;
	string father;
	string name;
	int fatherid;
	int ge = 0;
	while (type=getchar()) {
		if (type == '\n') type = getchar();
		if (type == '$') break;
		cin >> name;
		if (type == '#') {
			father = name;
			if (!mp.count(name)) {
				ge++;
				mp[name] = ge;
				mp2[ge] = name;
			}
			fatherid = mp[name];
		}
		if (type == '+') {
			if (!mp.count(name)) {
				ge++;
				mp[name] = ge;
				mp2[ge] = name;
			}
			int kid = mp[name];
			int rf = find_set(fatherid);
			int rk = find_set(kid);//每个孩子只有一个父亲,所有kid一定是根节点 
			if (rf != rk) {
				s[rk] = rf;
			}
		}
		if (type == '?') {
			int ans = find_set(mp[name]);
			cout << name << " " << mp2[ans] << endl;
		}
	}
	return 0;
}

这个是我代码,虽然我知道效率比较低,但也不至于全部超时,测试点1的测试内容就是样例,我在在线idle上得到的运行时间是22ms,但提交代码上去就直接超时了,希望有大佬能够指出为什么会超时,非常感谢

2025/2/8 00:32
加载中...