【并查集】家谱(luogu 2814/ssl 2343)
家谱
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)相关推荐
- 【图论】【并查集】矩形(ssl 1222)
矩形 ssl 1222 题目大意: 有n个矩阵,现在将有重叠部分的两个矩阵合并成一个图形,问有多少个图形 原题: 题目描述 在一个平面上有n个矩形.每个矩形的边都平行于坐标轴并且都具有值为整数的顶点. ...
- 【并查集】家族 (ssl 1896)
家族 ssl 1896 题目大意: 合并一些集合,然后判断某两个点是否在同一个集合内 原题: 题目描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出 ...
- 并查集——家谱(洛谷 P2814)
题目选自洛谷P2814 由于是字符串保存名字,使用数字对应数组来合并查找有一点麻烦,所以使用map将对应关系存起来即可. 因为map带有映射关系,好像不需要再写初始化和合并操作,用两个字符串变量,一个 ...
- 【并查集】银河英雄传说 (luogu 1196/ssl 1225)
银河英雄传说 luogu 1196 ssl 1225 题目大意: 有n列船,每列一开始有一艘船,可以将某一艘船所在的列所有船接到另外一列,然后会问某两艘船是否在一列,如果在那中间有多少艘船 原题: 题 ...
- 【并查集】打击犯罪(ssl 2342)
打击犯罪 ssl 2342 题目大意: 有n个人某些人之间有连接(连接成一个团伙),现在要最大的团伙人数不大于n/2,要最少要删掉几个人(要按顺序删) 原题: 题目描述: 某个地区有n(n<=1 ...
- 【并查集】团伙(luogu 1892)
团伙 luogu 1892 代码: 定义对手的对手是朋友,朋友的朋友是朋友,现在有n个人和m组关系,如果两个人是朋友那么他们属于同一个团伙,问有多少个团伙 原题: 题目描述 1920年的芝加哥,出现了 ...
- 【并查集】【图论】【最小生成树】剑鱼行动(ssl 1618)
剑鱼行动 ssl 1618 题目大意: 求一个平面直角坐标系中的最小生成树 原题: 题目描述 给出N个点的坐标,对它们建立一个最小生成树,代价就是连接它们的路径的长度,现要求总长度最小.N的值在100 ...
- 家谱树 (并查集拓扑排序)
目录 拓扑排序 Kahn. 最后附上Kahn的代码: 链式前向星做法: 其次是我用Kahn做的家谱树的代码(矩阵): 其次是我用Kahn做的家谱树的代码(链式前向星): [题目描述] 有个人的家族很大 ...
- 【并查集】【模拟】家谱
题目: 现代的人对于本家族血统越来越感兴趣, 现在给出充足的父子关系, 请你编写程序找到 某个人的最早的祖先. 输入: 输入文件由多行组成, 首先是一系列有关父子关系的描述, 其中每一组父子关系由二行 ...
最新文章
- Sort Colors leetcode java
- 语法之知识点的改进(Func/Action)
- RSS 之父炮轰 Google 强推 HTTPS
- Chrome浏览器长截图
- IEC61850建模说明
- Oracle项目管理系统之质量控制
- 详细微信小程序API文档
- c++一本通在线测评网站 1002:输出第二个整数
- 阿里入职培训,针不搓
- 关闭WPS热点及广告推送
- 积化和差、和差化积简记
- import cv2 失败“找不到指定模块”解决办法
- tensorflow学习:定义变量
- 「Git」常用工作流介绍
- html代码 如何使用方法,如何使用html代码
- Azure Messaging
- 用计算机制作动画,什么是计算机动画制作
- 20本Java相关电子书
- uniapp 扫码、拍照
- 最大似然估计和最大后验概率估计的区别
热门文章
- linux编程两个子进程,Linux中fork同时创建多个子进程的方法
- python能做哪些客户端_Python 实现简单的客户端认证
- [蓝桥杯][基础练习VIP]FJ的字符串-递归
- Ubuntu上安装使用Docker
- dedemodule.class.php,DEDECMS5.7模块/模块管理列表显示空白问题解决方法
- UVA719 Glass Beads 最小表示 / 后缀自动机
- Codeforces Round #740 (Div. 2) E. Bottom-Tier Reversals 构造
- P4062 [Code+#1]Yazid 的新生舞会 树状数组维护三阶差分
- hdu 6899 Xor 数位dp
- CF1208F Bits And Pieces(未解决)