洛谷P2814 家谱(c嘎嘎)

题目链接:P2814 家谱 - 洛谷 | 计算机科学教育新生态

题目难度:普及/提高

解题心得 :这道题用了并查集 (貌似不怎么常用的字符串并查集),用STL 中的map将子孙和祖先连接起来,第一次接触这种做法感觉很妙,发篇题解记录下。。。。

代码部分:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;	
#define _for(i,a,b) for(int i=(a); i<(b); i++)
#define _rep(i,a,b) for(int i=(a); i<=(b); i++)
typedef long long ll;
const int N = 1e5 + 10;
map<string,string>p; 
string s,t;

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

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr),cout.tie(nullptr);
	
     char ch;
     cin >> ch;
     
     while(ch != '$')
	 {
	 	cin >> s;
	 	if(ch == '#')
	 	{
	 		t = s;
	 		if(p[s] == "") p[s] = s;
		}
		else if(ch == '+')
		{
			p[s] = t;
		}
		else 
	    	cout<<s<<' '<<find(s)<<'\n';
	    cin >> ch;
	 } 
    
	
    return 0;
}
相关推荐
资深web全栈开发1 分钟前
力扣2536子矩阵元素加1-差分数组解法详解
算法·leetcode·矩阵·golang·差分数组
CoderBob2 分钟前
【EmbeddedGUI】简易Page开发模式
c语言·图像处理·单片机
njxiejing8 分钟前
Python pandas基础:Series数据操作详解
数据结构·pandas
弘毅 失败的 mian10 分钟前
C++、Java 还是测试开发?
java·c++·经验分享·笔记·测试开发·技术方向·就业
杜子不疼.12 分钟前
【C++】 set/multiset底层原理与逻辑详解
java·开发语言·c++
玖笙&23 分钟前
✨WPF编程进阶【7.2】:动画类型(附源码)
c++·c#·wpf·visual studio
汗流浃背了吧,老弟!29 分钟前
中文分词全切分算法
算法·中文分词·easyui
~~李木子~~34 分钟前
贪心算法实验1
算法·ios·贪心算法
橘色的喵1 小时前
C语言面向对象范式:Nginx模块化架构的设计分析
c语言·nginx·架构·面向对象
上去我就QWER1 小时前
C++标准库中的排序算法
c++·排序算法