洛谷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;
}
相关推荐
charlie11451419118 分钟前
精读C++20设计模式——结构型设计模式:外观模式
c++·学习·设计模式·c++20·外观模式
奔跑吧邓邓子1 小时前
【C++实战(58)】解锁C++内存优化密码:从泄漏检测到完美修复
c++·实战·内存优化
liulilittle1 小时前
macOS 内核路由表操作:直接 API 编程指南
网络·c++·macos·策略模式·路由·route·通信
辞旧 lekkk1 小时前
【c++】初识STL和string类
开发语言·c++·学习·萌新
smallnetter1 小时前
华为OD机试C卷 - 分苹果 - 二进制 - (Java & C++ & JavaScript & Python)
算法·华为od
haoly19892 小时前
数据结构与算法篇--结构不变式--动态数组
数据结构·不变式
爱和冰阔落2 小时前
【C++ STL栈和队列下】deque(双端队列) 优先级队列的模拟实现与仿函数的介绍
开发语言·数据结构·c++·算法·广度优先
少陵野小Tommy2 小时前
C语言验证哥德巴赫猜想
c语言·开发语言·学习·算法
想唱rap2 小时前
C++类和对象(2)
开发语言·c++·笔记·算法·新浪微博