90分第四个点不过求助
  • 板块P2814 家谱
  • 楼主WhiteNight__
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/3 13:17
  • 上次更新2024/4/3 17:30:25
查看原帖
90分第四个点不过求助
1098596
WhiteNight__楼主2024/4/3 13:17
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

struct node{
	string s = "  "; int c;
}a[50500];

int t , u;

int found (node s)
{
	if(a[s.c].c == s.c) return s.c;
	return a[s.c].c = found(a[s.c]);
}

int find (string s)
{
	if(s == "  ") return 0;
	for(int i = 1 ; i <= t ; i ++) 
	{
		if(a[i].s == s) 
		{
			return i;
		}
	}
	return 0;
}

int main()
{
	string s;
	while(cin >> s)
	{
		if(s[0] == '#')
		{
			u = find(s.substr(1));
			if(u != 0)
			{
				a[u].c = found(a[u]);
			}
			else{
				++t;
				a[t].s = s.substr(1);
				a[t].c = t;
			}
			
		}
		else if(s[0] == '+')
		{
			if(find(s.substr(1)) != 0)
			{
				a[find(s.substr(1))].c = found(a[t]);
			}
			else{
				++t;
				a[t].c = found(a[t-1]);
				a[t].s = s.substr(1);
			}
		}
		else if(s[0] == '?')
		{
			cout << s.substr(1) << " " << a[found(a[find(s.substr(1))])].s << "\n";
		}
	}
	
	return 0;
}

谢谢大佬

2024/4/3 13:17
加载中...