题目:

现代的人对于本家族血统越来越感兴趣, 现在给出充足的父子关系, 请你编写程序找到 某个人的最早的祖先。


输入:

输入文件由多行组成, 首先是一系列有关父子关系的描述, 其中每一组父子关系由二行 组成,用#name 的形式描写一组父子关系中的父亲的名字,用+name 的形式描写一组父子关 系中的儿子的名字;接下来用?name 的形式表示要求该人的最早的祖先;最后用单独的一个 $表示文件结束。规定每个人的名字都有且只有 6 个字符,而且首字母大写,且没有任意两 个人的名字相同。最多可能有 1000 组父子关系,总人数最多可能达到 50000 人,家谱中的 记载不超过 30 代。


输出:

按照输入文件的要求顺序,求出每一个要找祖先的人的祖先,格式:本人的名字+一个 空格+祖先的名字+回车。


样例输入:

#George
+Rodney
#Arthur
+Gareth
+Walter
#Gareth
+Edward
?Edward
?Walter
?Rodney
?Arthur
$

样例输出:

Edward Arthur
Walter Arthur
Rodney George
Arthur Arthur

思路:

并查集+map+模拟,map就是返回一个值指向一个元素,如果没找到就返回指向map尾部的迭代器。

map的定义

#include<map>
map<类型,类型>名称

代码:

#include<cstdio>
#include<iostream>
#include<map>
#include<string>
using namespace std;
map<string,string>f;//定义map
char e;
string c,father;
string find(string dep)//合并
{if(dep!=f[dep]) f[dep]=find(f[dep]);return f[dep];
}
int main()
{cin>>e;while(e!='$')//如果不结束就一直操作{cin>>c;if(e=='#')//描写一组父子关系中的父亲的名字{father=c;//把名字给fatherif(f[c]=="")f[c]=c;}else if(e=='+')f[c]=father;//描写一组父子关 系中的儿子的名字else cout<<c<<' '<<find(c)<<endl;//输出cin>>e;}return 0;
}

【并查集】【模拟】家谱相关推荐

  1. 【并查集】家谱(luogu 2814/ssl 2343)

    家谱 luogu 2814 ssl 2343 题目大意: 给一堆父子关系,求出一些人的最大的祖先 原题: 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到 ...

  2. zcmu 1603 卡斯丁狗的战舰帝国(并查集+模拟)

    思路:看到题目我只知道,普通的暴力模拟是不行的,但是不知道用什么办法优化,然后看到网上的大佬们用了并查集恍然大悟: 用并查集维护每条船攻击后的根节点,最后输出查询位置的根节点就行,如果在期间存在该位置 ...

  3. 洛谷 - P4997 - 不围棋 - 并查集 - 模拟

    https://www.luogu.org/problemnew/show/P4997 首先是改变气的定义,使得容易计算,这个很好理解. 然后使用并查集,因为要维护整个连通块的性质. 最后的难点在于, ...

  4. D. Vessels(并查集+模拟)

    https://codeforces.com/problemset/problem/371/D 题意:给一个从上到下容积依次增大的容器,多次操作,给某个容器倒水,如果这个容器满了就会溢出,直到最后一个 ...

  5. 图论 ---- 启发式合并 + 并查集模拟 + 证明 F. Phoenix and Earthquake

    题目大意: 给你nnn个点,mmm条边,限制xxx,每个点都有沥青aia_iai​ ,定义合并两个点即两点之间有边且au+av≥xa_u+a_v\ge xau​+av​≥x,合并之后的沥青为au+av ...

  6. 并查集 ---- 扩展域并查集判二分图 + 循环模拟字典树 The 2020 ICPC Asia Macau Regional Contest C. Club Assignment (详解)

    题目链接 题目大意: 有n个数,现在要把他们拆分成两个集合,假设S为集合,有如下定义: f(S)={min(x⊕y)∣x,y∈S,andx!=y}f(S)=\{min(x\oplus y)|x,y\i ...

  7. HDU-3974 Assign the task 线段树 或 直接模拟多叉树 或 并查集 (三种方法)

    题目大意 t 组数据(t<=10),每组第一行一个 n 表示 n 个员工(n<=5e4),接下来 n-1 行,每行两个整数 u,v 表示 v 是 u 的上司 然后一行 m 表示有 m 个操 ...

  8. 家谱树 (并查集拓扑排序)

    目录 拓扑排序 Kahn. 最后附上Kahn的代码: 链式前向星做法: 其次是我用Kahn做的家谱树的代码(矩阵): 其次是我用Kahn做的家谱树的代码(链式前向星): [题目描述] 有个人的家族很大 ...

  9. 并查集是什么?怎么模拟实现?如何应用?

    目录 一.什么是并查集? 二.并查集可以解决哪些问题? 三.并查集的模拟实现 3.1.并查集的定义 3.2.查询两个元素是否是同一个集合 3.3.合并两个集合 3.4.求集合个数 3.5.并查集完整代 ...

最新文章

  1. Spring MVC与表单日期提交的问题
  2. 数字录音系统服务器,Internet呼叫中心坐席全程录音系统录音模块
  3. Hadoop四大组件
  4. 普元连接mysql_普元EOS 案例 - 还有一行代码的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. apache 禁止trace或track防止xss***
  6. 大数据 -- 安装Hadoop-单机模式(1)
  7. OpenvSwitch架构
  8. 廖雪峰Java1-1Java入门-java简介
  9. 判断Mouse事件源类型
  10. Java一键多值Map 之Guava Multimap 用法简介
  11. 多线程获取不到HttpContext
  12. [BZOJ4872][六省联考2017]分手是祝愿(期望DP)
  13. php 验证手机号码(海外手机号)
  14. 2021大树分享收集的网盘搜索站给兄弟们
  15. Java代码编写规范总结
  16. python爬取贴吧数据_【python】利用requests爬取百度贴吧用户信息
  17. pandas按照多列排序-ascending
  18. [C语言入门可读]学习书籍;学习工具、网站;刷题网站推荐
  19. 谷歌浏览器 如何设置在新标签页打开链接
  20. android怎么装windows系统,普通电脑怎么装Windows和安卓的双系统?

热门文章

  1. 一个由hbm.xml文件格式不正确引发的悲催
  2. Windows自动更新导致蓝屏
  3. VMWare虚拟机识别USB设备
  4. Floyd算法 Java实现
  5. UnicodeEncodeError: 'gbk' codec can't encode character '\u200b' in position 0: illegal multibyte seq
  6. linux 下载文件放哪里,请问是用Yum install命令安装时下载的文件包放在哪里了?...
  7. org.activiti.engine.ActivitiException: couldn‘t resolve duedate问题的一个解决
  8. VS1005 VSOS 固件和 MegaLib 亮点
  9. java判断图片是否被修改过_4种方法判断图片是否被PS处理过,你都会吗? | X的博客...
  10. 好心情:很多身体疾病与心理有关,做到这5点可以有效缓解