题目描述:
如果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. 【ES6】正则表达式的拓展
  2. 赛灵思CEO Victor Peng:中国AI市场创新速度令人振奋,但初创企业应避免扎堆做AI芯片...
  3. 编解码:Base64编码在URL中的应用
  4. Py之pygame:Python的pygame库的简介、安装、使用方法详细攻略
  5. 通俗讲解自底向上构建知识图谱全过程
  6. python set
  7. [C/C++]重读《The C Programming Language》
  8. 异常作业2(2018.08.22)
  9. linux同时安装python2和python3_linux-Centos7安装python3并与python2共存
  10. vm磁盘映射 不能启动_软网推荐:网盘变身本地磁盘
  11. 关于OpenCV的基本数据类型
  12. C# 委托的三种调用示例(同步调用 异步调用 异步回调)
  13. RabbitMQ实战:理解消息通信
  14. android 生成车牌号,android 车牌号识别系统app源码
  15. 北航计算机组成原理课程设计-2021秋 PreProject-MIPS-MIPS 汇编程序解析
  16. FZOJ P2109 【卡德加的兔子】
  17. 旷视2020图像算法工程师机考题(15道选择题)
  18. unity3d wwise 基础相关
  19. windows7 系统下载
  20. java 利用工具包Geotools实现不同坐标系之间坐标转换

热门文章

  1. 实例QT程序 —— QTableView 表格行的上下移动
  2. 写一份好的求职简历,让面试官对你刮目相看
  3. livy使用样例_hue 集成spark+livy
  4. Java实现磁盘的顺序读写
  5. ARIS 中的概念和表达法
  6. 激活函数ReLU、Leaky ReLU、tanh(双曲正切函数Hyperbolic tangent function)
  7. 使用python批量修改文件名
  8. matlab中注水算法的实现和原理
  9. PHP代码审计二(通用代码审计思路)
  10. 图像处理基础知识整理