警示后人,如果你没用map,且TLE最后两个点
  • 板块P2814 家谱
  • 楼主_sh1kong_
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/3/29 20:57
  • 上次更新2023/10/23 20:05:26
查看原帖
警示后人,如果你没用map,且TLE最后两个点
823773
_sh1kong_楼主2023/3/29 20:57

RT,加cin优化及开O2

#include <iostream>
#include <map> 

#define endl "\n"

const int N = 100100;

using namespace std;

char ch;

int fa[N], idx;

string q, s1, s2, que[N];

int query(string s)

{
	for (int i = 1; i <= idx; i ++ )
	{
		if (que[i] == s) return i;
	}
	que[++ idx] = s;
	return idx;
}

int find(int x)

{
	if (fa[x] != x) fa[x] = find(fa[x]);
	return fa[x];
}

int main()

{
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	
	for (int i = 1; i <= 50000; i ++ ) fa[i] = i;
	do
	{
		cin >> ch;
		if (ch == '#') cin >> s1;
		else if (ch == '+')
		{
			cin >> s2;
			fa[find(query(s2))] = find(query(s1));
		}
		else if (ch == '?')
		{
			cin >> q;
			cout << q << " " << que[find(query(q))] << endl;
		}
	}while (ch != '$');
}
2023/3/29 20:57
加载中...