九度1035:找出直系亲属并查集
- 题目描述:
-
如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-。
- 输入:
-
输入包含多组测试用例,每组用例首先包含2个整数n(0<=n<=26)和m(0<m<50), 分别表示有n个亲属关系和m个问题, 然后接下来是n行的形式如ABC的字符串,表示A的父母亲分别是B和C,如果A的父母亲信息不全,则用-代替,例如A-C,再然后是m行形式如FA的字符串,表示询问F和A的关系。
当n和m为0时结束输入。
- 输出:
-
如果询问的2个人是直系亲属,请按题目描述输出2者的关系,如果没有直系关系,请输出-。
具体含义和输出格式参见样例.
- 样例输入:
-
3 2 ABC CDE EFG FA BE 0 0
- 样例输出:
-
great-grandparent -
用并查集,根据孩子建立child表
例如样例
建立好,最后询问a和b的关系直接遍历就好
如果从a能找到b说明a是b的长辈
如果从b能找到a说明a是b的晚辈
如果都找不到,那么两个人没关系输出-
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<map>
#include<algorithm>
#include<cmath>
using namespace std;
int child[100];
int find(int x,int y){while(1){if(x==y) return 1;if(x==child[x]) break;x=child[x];}return 0;
}
int main(){int n,m;while(1){cin>>n>>m;if(n==0&&m==0) break;getchar();for(int i=0;i<100;i++) child[i]=i;while(n--){char a,b,c;cin>>a>>b>>c;getchar();if(b!='-') child[b-'A']=a-'A';if(c!='-') child[c-'A']=a-'A';}while(m--){char a,b;cin>>a>>b;getchar();int aa=a-'A',bb=b-'A';int flag=0;if(find(aa,bb)){flag=1;int len=0;while(aa!=bb){aa=child[aa];len++;}if(len==1) cout<<"parent"<<endl;if(len==2) cout<<"grandparent"<<endl;if(len>=3){for(int i=2;i<len;i++) cout<<"great-";cout<<"grandparent"<<endl;}}if(find(bb,aa)){flag=1;int len=0;while(aa!=bb){bb=child[bb];len++;}if(len==1) cout<<"child"<<endl;if(len==2) cout<<"grandchild"<<endl;if(len>=3){for(int i=2;i<len;i++) cout<<"great-";cout<<"grandchild"<<endl;}}if(flag==0) cout<<'-'<<endl;}
}return 0;
}
九度1035:找出直系亲属并查集相关推荐
- 九度[1035]-找出直系亲属
九度[1035]-找出直系亲属 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A, ...
- 九度OJ 1035:找出直系亲属(二叉树)
题目1035:找出直系亲属 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1309 解决:521 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如 ...
- 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)
题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...
- hdu3786 找出直系亲属 水题
题意: 找出直系亲属 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU3786 找出直系亲属【关系闭包】
找出直系亲属 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- KY122 找出直系亲属
KY122 找出直系亲属 def cntGen(parentsDict, descendant, ascendant):if descendant not in parentsDict:return ...
- 粒子群(PSO)、量子粒子群(QPSO)优化LSTM网络超参数,以均方差为适应度,找出一组网络超参数,解决网络设置参数盲目性的问题
粒子群(PSO).量子粒子群(QPSO)优化LSTM网络超参数,以均方差为适应度,找出一组网络超参数,解决网络设置参数盲目性的问题. 可用于负荷预测,风电功率预测,光伏发电预测等时序序列,matlab ...
- mysql找出两个结果集不同数据_如何快速对比MySQL两个不同实例上的数据并找出差异...
在MySQL运维中,研发同事想对比下两个不同实例上的数据并找出差异,除主键外还需要对比每一个字段,如何做呢? 第一种方案,写程序将两个实例上的每一行数据取出来进行对比,理论可行,但是对比时间较长. 第 ...
- HDU_3786 找出直系亲属- softbar
Problem Description 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的 ...
最新文章
- Windows 命名管道 + 异步I/O模型
- 云炬VB开发笔记 2可视化编程基础
- SocketIO---bio2---带线程池处理任务
- 关于多库操作一些想法
- 深度学习笔记(30) Inception网络
- 5.3傅立叶变换意境级讲解
- 换行符在HTML中直接替换为br
- MIS系统权限控制的一个简便方法
- mysql 局部变量集合_mysql全局变量和局部变量
- 【转载】AssetBundle资源打包加载管理
- 验证码功能-简单实现
- 内网地址映射到公网地址
- sap服务器之间文件复制,sap跨服务器客户端复制
- 记录下公司刻录新版本/repo_kitkat 命令
- JSD-2204-Session-Token-JWT-Day12
- 全球手机芯片产业格局未定,LTE和中国是最大变数
- Linux下vim的复制、粘贴操作
- java jdk1.8.0_221 安装步骤
- java 百度地图_Java web实现百度地图导航
- .NET 5.0 正式版发布了!
热门文章
- 1.SQL--创建学生表和向学生表插入数据
- HBuilderx打包APP解决支付问题
- adb native raact 夜神_如何使用夜神模拟器调试ReactNative应用
- 深圳地区8月份数据分析招聘分析
- 大学计算机基础 试卷分析,基于SPSS大学计算机基础考试试卷分析.doc
- 在分析了豆瓣Top250电影的数据后,我发现了这些不为人知的规律(附源代码和详情讲解)
- CSS中精灵图的使用
- 字符串删除重复字符_高效的字符串清理-删除内部重复空间
- js字节单位转换函数(KB MB GB TB PB EB ZB)
- 全球月活用户4年破10亿,TikTok的3大底层逻辑