家谱

luogu 2814

ssl 2343

题目大意:

给一堆父子关系,求出一些人的最大的祖先

原题:

题目背景

现代的人对于本家族血统越来越感兴趣。

题目描述

给出充足的父子关系,请你编写程序找到某个人的最早的祖先。

输入输出格式

输入格式:

输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个$表示文件结束。

输出格式:

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

输入输出样例

输入样例#1:

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

输出样例#1:

Edward Arthur
Walter Arthur
Rodney George
Arthur Arthur

说明

规定每个人的名字都有且只有6个字符,而且首字母大写,且没有任意两个人的名字相同。最多可能有1000组父子关系,总人数最多可能达到50000人,家谱中的记载不超过30代。

题目大意:

直接同map把关系存起来,然后并查集

代码:

#include<map>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
string str,strr,str1,strr1;
char x;
map<string,string>dad;//map好东西
string find(string dep){return dad[dep]==""?dep:dad[dep]=find(dad[dep]);}//并查集
char gc()
{char xx;cin>>xx;while (xx=='\n'||xx==' ') cin>>xx;//跳过空格和换行符return xx;
}
int main()
{x=gc();while(x!='$'){cin>>str;if (x=='#'){while ((x=gc())=='+')//他的所有儿子{cin>>strr;dad[find(strr)]=find(str);//记录}//因为会把下一次的也输进去,所以不用再输入了}else if (x=='?') cout<<str<<" "<<find(str)<<endl,x=gc();//输出,顺便输入}
}

【并查集】家谱(luogu 2814/ssl 2343)相关推荐

  1. 【图论】【并查集】矩形(ssl 1222)

    矩形 ssl 1222 题目大意: 有n个矩阵,现在将有重叠部分的两个矩阵合并成一个图形,问有多少个图形 原题: 题目描述 在一个平面上有n个矩形.每个矩形的边都平行于坐标轴并且都具有值为整数的顶点. ...

  2. 【并查集】家族 (ssl 1896)

    家族 ssl 1896 题目大意: 合并一些集合,然后判断某两个点是否在同一个集合内 原题: 题目描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出 ...

  3. 并查集——家谱(洛谷 P2814)

    题目选自洛谷P2814 由于是字符串保存名字,使用数字对应数组来合并查找有一点麻烦,所以使用map将对应关系存起来即可. 因为map带有映射关系,好像不需要再写初始化和合并操作,用两个字符串变量,一个 ...

  4. 【并查集】银河英雄传说 (luogu 1196/ssl 1225)

    银河英雄传说 luogu 1196 ssl 1225 题目大意: 有n列船,每列一开始有一艘船,可以将某一艘船所在的列所有船接到另外一列,然后会问某两艘船是否在一列,如果在那中间有多少艘船 原题: 题 ...

  5. 【并查集】打击犯罪(ssl 2342)

    打击犯罪 ssl 2342 题目大意: 有n个人某些人之间有连接(连接成一个团伙),现在要最大的团伙人数不大于n/2,要最少要删掉几个人(要按顺序删) 原题: 题目描述: 某个地区有n(n<=1 ...

  6. 【并查集】团伙(luogu 1892)

    团伙 luogu 1892 代码: 定义对手的对手是朋友,朋友的朋友是朋友,现在有n个人和m组关系,如果两个人是朋友那么他们属于同一个团伙,问有多少个团伙 原题: 题目描述 1920年的芝加哥,出现了 ...

  7. 【并查集】【图论】【最小生成树】剑鱼行动(ssl 1618)

    剑鱼行动 ssl 1618 题目大意: 求一个平面直角坐标系中的最小生成树 原题: 题目描述 给出N个点的坐标,对它们建立一个最小生成树,代价就是连接它们的路径的长度,现要求总长度最小.N的值在100 ...

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

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

  9. 【并查集】【模拟】家谱

    题目: 现代的人对于本家族血统越来越感兴趣, 现在给出充足的父子关系, 请你编写程序找到 某个人的最早的祖先. 输入: 输入文件由多行组成, 首先是一系列有关父子关系的描述, 其中每一组父子关系由二行 ...

最新文章

  1. Sort Colors leetcode java
  2. 语法之知识点的改进(Func/Action)
  3. RSS 之父炮轰 Google 强推 HTTPS
  4. Chrome浏览器长截图
  5. IEC61850建模说明
  6. Oracle项目管理系统之质量控制
  7. 详细微信小程序API文档
  8. c++一本通在线测评网站 1002:输出第二个整数
  9. 阿里入职培训,针不搓
  10. 关闭WPS热点及广告推送
  11. 积化和差、和差化积简记
  12. import cv2 失败“找不到指定模块”解决办法
  13. tensorflow学习:定义变量
  14. 「Git」常用工作流介绍
  15. html代码 如何使用方法,如何使用html代码
  16. Azure Messaging
  17. 用计算机制作动画,什么是计算机动画制作
  18. 20本Java相关电子书
  19. uniapp 扫码、拍照
  20. 最大似然估计和最大后验概率估计的区别

热门文章

  1. linux编程两个子进程,Linux中fork同时创建多个子进程的方法
  2. python能做哪些客户端_Python 实现简单的客户端认证
  3. [蓝桥杯][基础练习VIP]FJ的字符串-递归
  4. Ubuntu上安装使用Docker
  5. dedemodule.class.php,DEDECMS5.7模块/模块管理列表显示空白问题解决方法
  6. UVA719 Glass Beads 最小表示 / 后缀自动机
  7. Codeforces Round #740 (Div. 2) E. Bottom-Tier Reversals 构造
  8. P4062 [Code+#1]Yazid 的新生舞会 树状数组维护三阶差分
  9. hdu 6899 Xor 数位dp
  10. CF1208F Bits And Pieces(未解决)