查找家谱
描述:

堂亲(又作一代堂亲),是我叔叔的儿子;我的二代堂亲,是我父亲的一代堂亲的儿子;

我的一代隔一代堂亲,是我的一代堂亲的儿子;

兄弟之间是零代堂亲关系;

一般的说,任何两个人,如果其中一人是另一人的g代祖先(g>=1),他们之间的关系就是g-直系。

如果没有直系关系,但两人有共同的祖先,最近的共同祖先与其中一人相距(m+1)代,与另一人

相距(m+1+ n代,就称这两个人为m代隔n堂亲(m>=0,n>=0)。我们把这样的关系记作m-n-堂亲。

写一个程序,实现:

1)增加指定两人的父子关系;

2)找出任意指定两人之间的关系:堂亲、直系或没有关系。

说明:

1、本考题中一个人有且只有一个名字,且不存在重名

2、自己和自己既不是直系也不是堂亲关系

运行时间限制: 无限制
内存限制: 无限制
输入:

输出一个整数N,说明后面输入有N行字符串。

每个字符串包括3个子串,以空格分隔。

第一个子串是命令字,后面是2个人的姓名

命令包括:

AddRelationShip Don Bill   增加Don是Bill的父亲

GetGeneration Don Bill获取Don和Bill两人间的直系关系,如果两人间存在直系关系时,输出两人直系代数,否则输出-1

GetCousin  Don Bill获取两人间的堂亲关系。如果两人间存在堂亲关系时,输出M N(M代隔N)堂亲,M和N之间一个空格隔开;否则输出-1

输出:

GetGeneration 和 GetCousin命令需要输出

GetGeneration 如果两人间存在直系关系时,输出两人直系代数,否则输出-1。

GetCousin 如果两人间存在堂亲关系时,输出M N(M代隔N)堂亲;否则输出-1。

样例输入:
7
AddRelationShip Don Bill
AddRelationShip Don Fred
AddRelationShip Bill John
AddRelationShip Fred Jake
GetGeneration Don Bill
GetGeneration Eric Sun
GetCousin John Jake
样例输出:
1
-1
1 0
答案提示:
 

查找树深度函数shen()有错!无法跳出循环。

#include<iostream>
#include<map>
using namespace std;
map <char*,int> hash1;
int par[101];
int rank1[100];void init(int n)
{for(int i=0;i<n;i++){par[i]=i;rank1[i]=0;}
}int find1(int x)
{if(par[x]==x){return x;}else{return par[x]=find1(par[x]);}
}bool find2(int x,int y)
{if(rank1[x]>rank1[y]){while(rank1[x]>rank1[y]){if(par[y]==x) return true;else y=par[y];}}else if(rank1[x]<rank1[y]){while(rank1[x]<rank1[y]){if(par[x]==y) return true;else x=par[x];}}return false;
}
int shen(int x)
{int i=0;int dx=find1(x);while(x!=dx);{x=par[x];i++;}return i;}
int ge(int x,int y)
{int i=0;x=par[x];while(1){x=par[x];i++;int dy=y;while(par[dy]!=find1(dy)){if(par[dy]==x)return i;dy=par[dy];}}}void unite(int x,int y)
{x=find1(x);y=find1(y);if(x==y) return;if(rank1[x]<rank1[y]){par[x]=y;}else{par[y]=x;if(rank1[x]==rank1[y]) rank1[x]++;}
}bool same(int x,int y)
{return find1(x)==find1(y);
}int main(void)
{int N;int R=0;int id1,id2;init(100);cin>>N;for(int i=0;i<N;i++){char m[20],m1[10],m2[10];cin>>m>>m1>>m2;if(m[3]=='R'){map<char*,int>::iterator ite;ite=hash1.find(m1);if(ite==hash1.end()){hash1[m1]=R;id1=R;R++;}else{id1=ite->second;}map<char*,int>::iterator ite1;ite1=hash1.find(m2);if(ite1==hash1.end()){hash1[m2]=R;id2=R;R++;}else{id2=ite1->second;}unite(id2,id1);}if(m[3]=='G'){map<char*,int>::iterator ite;ite=hash1.find(m1);id1=ite->second;map<char*,int>::iterator ite1;ite1=hash1.find(m2);id2=ite1->second;if(same(id1,id2)&&find2(id1,id2)){int daishu=shen(id1)-shen(id2);cout<<daishu<<endl;}else{cout<<"-1"<<endl;}}if(m[3]=='C'){map<char*,int>::iterator ite;ite=hash1.find(m1);id1=ite->second;map<char*,int>::iterator ite1;ite1=hash1.find(m2);id2=ite1->second;if(same(id1,id2)&&!find2(id1,id2)){int tshu=shen(id1)-shen(id2);int haha=ge(id1,id2);cout<<haha<<" "<<tshu<<endl;}else{cout<<"-1"<<endl;}}}return 0;
}

华为校园编码达人秀(第二季) 查找家谱相关推荐

  1. 街舞中的rolling机器人_《这就是街舞》第二季队长大秀 易烊千玺机器人舞

    易烊千玺队长大秀 7月6日,中国首档街舞选拔类真人秀<这就是街舞>第二季第八期节目上线.本期节目开启复赛第二轮大战,易烊千玺携手易燃装置带来队长大秀,机器人舞创意满分,默契齐舞感染力十足. ...

  2. 135编辑器第二季校园新媒体文案排版大赛(西部站)开始啦!

    135编辑器第二季校园新媒体文案排版大赛(西部站)开始啦! 大赛简介 前瞻产业研究院发布的<2019年就业指导蓝皮书>中,指出2019年就业景气度在2018年的基础上持续走低:2020年受 ...

  3. 高晓松脱口秀--晓说(第一季第二季)mp3下载

    首先推荐一款不错的路由器  399元返399元 相当于 0元购! 具体我就不多说了,请点这里 晓说 第一季 (1-5) http://pan.baidu.com/share/link?shareid= ...

  4. 华为校园招聘技术类笔试面试经验(摘)

    华为校园招聘技术类笔试面试经验(摘) 华为效率很高,果然是狼性文化,从一面到最后一面,一天结束,四面:技术面.集体面(群面),压力测试.主管面试. 第一面:技术面 通知我18日10:30去面试,我接近 ...

  5. 2014届华为校园招聘机试题

    华为2014校园招聘的机试题目和2013年的完全一样. 一.题目描述(60分): 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的 ...

  6. [转]算术编码+统计模型=数据压缩 - 第二部分:统计模型

    转自:http://deercrane.spaces.live.com/blog/cns!8BEF692B75EB8095!189.entry 算术编码 + 统计模型 = 数据压缩 - 第二部分:统计 ...

  7. arduinojson 转 string_安德胜工作室发来本周五嗨唱转起来第二季首秀的嘉宾剧透...

    湖南卫视全民音乐综艺互动秀<嗨唱转起来2>10月2日超燃回归,在金秋十月为观众带来新一季的惊喜.近日,官方微博官宣大玩家阵容:"太阳女神"谢娜."节奏先生&q ...

  8. Web-Attak系列教程第二季0x12讲——HTTP的请求与响应格式

    分享知识,分享快乐:收获友谊,收获财富. 大家好,我是数字雨,QQ:798033502 主站:http://www.91duofanli.com/ 店铺:http://itbook.taobao.co ...

  9. 前端智勇大闯关-第二季-第三题

    前端智勇大闯关-第二季-第三题 10的世界 在我们的世界里,字母A很好理解 键盘兄表示65无压力 CPU表示01000001才是王道 1.题目中描述的三句话:二进制与十进制与A之间的相互转换 2.在t ...

最新文章

  1. matlab中调用java代码_Matlab中调用第三方Java代码
  2. vi 整行 多行 复制与粘贴
  3. [Effective JavaScript 笔记]第29条:避免使用非标准的栈检查属性
  4. 技术阻击疫情,开发者在行动
  5. easyui datagrid local pager 表格本地分页
  6. python ev3图形化编程软件下载_mPython(图形化编程软件)
  7. Minimizing Difference CodeForces - 1244E(贪心题)
  8. JMS学习二(简单的ActiveMQ实例)
  9. 如何产生cpk图形_PPK与CPK定义,差异分析及计算
  10. [bug解决] Ubantu打不开Typora:typora error while loading shared libraries libXss.so.1
  11. 网络安全实验室 综合关 解析
  12. 2022大厂高频面试题之CSS篇
  13. ssm毕设项目自来水收费管理系统7yd5p(java+VUE+Mybatis+Maven+Mysql+sprnig)
  14. 【论文笔记】SimplE Embedding for Link Prediction in Knowledge Graphs
  15. java星星闪烁代码_css3实现星星闪烁效果
  16. 使用ASMap构建高密度遗传图谱
  17. 试题 算法训练 单词翻转 文章翻转 JAVA
  18. 「DR老兵寻访」游戏正规军的“万智牌生态”链改计划
  19. 云计算时代催生下一代网络变革-软件定义的网络之技术架构篇
  20. python 把汉字转化为拼音-Python汉字转换成拼音

热门文章

  1. CentOS7安装harbor仓库+修改默认用户+仓库登录报错
  2. matlab导数曲线怎样画,matlab三次样条曲线的绘制(spline和csape函数详解)
  3. Python+Selenium自动化测试——126邮箱自动登录脚本(登录首页是二维码,切入账号密码输入框)
  4. 外媒分析:为何说苹果一定没造车!
  5. 16进制数组和ASK码字符之间的转换
  6. adams语句_ADAMS模态力 - MSC技术文章 - 中国仿真互动网(www.Simwe.com)
  7. Python案例篇3-pip install 失败 Command “python setup.py egg_info“ failed with error code 1
  8. 沐风微信营销水库模型二:建设专属秘密武器库!
  9. PPC/SP/PC汉化教程:如何汉化一个软件
  10. Linux内核4.14版本——mmc core(7)——mmc core主模块(3)总线io setting相关(struct mmc_ios)