题目描述:
如果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:找出直系亲属并查集相关推荐

  1. 九度[1035]-找出直系亲属

    九度[1035]-找出直系亲属 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A, ...

  2. 九度OJ 1035:找出直系亲属(二叉树)

    题目1035:找出直系亲属 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1309 解决:521 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如 ...

  3. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...

  4. hdu3786 找出直系亲属 水题

    题意: 找出直系亲属 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. HDU3786 找出直系亲属【关系闭包】

    找出直系亲属 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  6. KY122 找出直系亲属

    KY122 找出直系亲属 def cntGen(parentsDict, descendant, ascendant):if descendant not in parentsDict:return ...

  7. 粒子群(PSO)、量子粒子群(QPSO)优化LSTM网络超参数,以均方差为适应度,找出一组网络超参数,解决网络设置参数盲目性的问题

    粒子群(PSO).量子粒子群(QPSO)优化LSTM网络超参数,以均方差为适应度,找出一组网络超参数,解决网络设置参数盲目性的问题. 可用于负荷预测,风电功率预测,光伏发电预测等时序序列,matlab ...

  8. mysql找出两个结果集不同数据_如何快速对比MySQL两个不同实例上的数据并找出差异...

    在MySQL运维中,研发同事想对比下两个不同实例上的数据并找出差异,除主键外还需要对比每一个字段,如何做呢? 第一种方案,写程序将两个实例上的每一行数据取出来进行对比,理论可行,但是对比时间较长. 第 ...

  9. 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的 ...

最新文章

  1. Windows 命名管道 + 异步I/O模型
  2. 云炬VB开发笔记 2可视化编程基础
  3. SocketIO---bio2---带线程池处理任务
  4. 关于多库操作一些想法
  5. 深度学习笔记(30) Inception网络
  6. 5.3傅立叶变换意境级讲解
  7. 换行符在HTML中直接替换为br
  8. MIS系统权限控制的一个简便方法
  9. mysql 局部变量集合_mysql全局变量和局部变量
  10. 【转载】AssetBundle资源打包加载管理
  11. 验证码功能-简单实现
  12. 内网地址映射到公网地址
  13. sap服务器之间文件复制,sap跨服务器客户端复制
  14. 记录下公司刻录新版本/repo_kitkat 命令
  15. JSD-2204-Session-Token-JWT-Day12
  16. 全球手机芯片产业格局未定,LTE和中国是最大变数
  17. Linux下vim的复制、粘贴操作
  18. java jdk1.8.0_221 安装步骤
  19. java 百度地图_Java web实现百度地图导航
  20. .NET 5.0 正式版发布了!

热门文章

  1. 1.SQL--创建学生表和向学生表插入数据
  2. HBuilderx打包APP解决支付问题
  3. adb native raact 夜神_如何使用夜神模拟器调试ReactNative应用
  4. 深圳地区8月份数据分析招聘分析
  5. 大学计算机基础 试卷分析,基于SPSS大学计算机基础考试试卷分析.doc
  6. 在分析了豆瓣Top250电影的数据后,我发现了这些不为人知的规律(附源代码和详情讲解)
  7. CSS中精灵图的使用
  8. 字符串删除重复字符_高效的字符串清理-删除内部重复空间
  9. js字节单位转换函数(KB MB GB TB PB EB ZB)
  10. 全球月活用户4年破10亿,TikTok的3大底层逻辑