[ 题解 ] [ 最小公共父节点 ] E. Family Tree
时间:2019-03-15
本文章向大家介绍[ 题解 ] [ 最小公共父节点 ] E. Family Tree,主要包括[ 题解 ] [ 最小公共父节点 ] E. Family Tree使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
http://codeforces.com/group/NVaJtLaLjS/contest/238202/problem/E
题意:
输入数字N,还有两只牛的名字;
输入N行父子关系(题中为母女)即两个名字,前者是父,后者是子;
问两只牛是什么亲属关系。
具体的输出规则(亲属关系)请见原题。
示例:
Input:
7 AA BB MOTHER AA GGMOTHER BB MOTHER SISTER GMOTHER MOTHER GMOTHER AUNT AUNT COUSIN GGMOTHER GMOTHER
Output:
BB is the great-aunt of AA
求最小公共父节点,看题目的示意图都能猜出来。
这里用C++的string变量好很多,我用strcmp比较,strcpy赋值/返回值写到吐血,最终还是得抄别人AC的C++......
(留下不会写C++的泪水,顺便围观了大佬的数组映射实现)
这个数组映射就是mother[i]字符串是daughter[i]的母亲(父节点)。
没有什么特别的,只是不需要写结构体,虽然查找父节点没有结构体链表快不过这数据量是不会超时的。
我解释下两个函数是什么:
find:找父节点。找到了返回父节点(母亲)的名字,没有就返回 "" ;
issame:函数名不知道是什么意思。这个会找出a是b的ct级父节点,找不到就返回-1;
输入后我们先以A牛开始,不停找A牛的祖先,直到这个祖先就是B牛的祖先为止。
假如搜索到老祖宗也没有找到B牛的祖先,说明A,B不是亲属,输出"NOT RELATED"。
记下A牛B牛到这个祖先的辈分。如果两个值都是1,说明是同一个母亲,输出"SIBLINGS";
如果两个值都大于1,说明只是同一个祖母(以上),关系是"COUSINS";
不是这两种情况就是祖先或者祖姨母,用复杂的输出规则输出。
(抄大佬的)代码如下:
1 #include <stdio.h> 2 #include <string> 3 #include <stdlib.h> 4 #include <algorithm> 5 #include <iostream> 6 7 using namespace std; 8 9 int N; 10 string cowA,cowB; 11 string mother[102],daughter[102]; 12 string now; 13 14 string find(string a) 15 { 16 for(int i=0;i<N;i++) 17 { 18 if(a==daughter[i]) 19 return mother[i]; 20 } 21 return ""; 22 } 23 int issame(string a,string b) 24 { 25 int ct=0; 26 while(b!="") 27 { 28 if(a==b)return ct; 29 b=find(b); 30 ct++; 31 } 32 return -1; 33 } 34 int main() 35 { 36 cin >> N >> cowA >> cowB ; 37 for(int n=0;n<N;n++) 38 cin >> mother[n] >> daughter[n] ; 39 now=cowA; 40 int countA=0; 41 while(now!="") 42 { 43 if(issame(now,cowB)!=-1)break; 44 now=find(now); 45 countA++; 46 } 47 if(now=="") 48 { 49 puts("NOT RELATED"); 50 return 0; 51 } 52 int countB=issame(now,cowB); 53 if(countA==countB && countA==1) 54 { 55 puts("SIBLINGS"); 56 return 0; 57 } 58 else if(countA>1 && countB>1) 59 { 60 puts("COUSINS"); 61 return 0; 62 } 63 else 64 { 65 if(countA<countB) 66 { 67 swap(cowA,cowB); 68 swap(countA,countB); 69 } 70 cout << cowB << " is the "; 71 for(int i=0;i<countA-2;i++) 72 printf("great-"); 73 if(countA>1&&countB==0) 74 printf("grand-"); 75 if(countB==0) 76 printf("mother"); 77 else 78 printf("aunt"); 79 cout << " of " << cowA << endl ; 80 } 81 return 0; 82 }
- tcpdump捕捉样例
- Log4j详细使用教程
- Android系统线控和歌曲信息屏显的那点事
- 利用Spring中同名Bean相互覆盖的特性,定制平台的类内容。
- 关于java传参
- 浅析ButterKnife
- SQL Server常用语句
- pyecharts(一):Python可视化利器
- 如何在Python中保存ARIMA时间序列预测模型
- SVN+Apache域用户认证配置方法_Windows(转,重新排版,部分内容更新优化)
- sum(x) over( partition by y ORDER BY z ) 分析
- Android DataBinding 数据绑定
- Flask拾遗笔记之上下文
- switch.....case....使用最容易犯错的地方
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php文件操作之文件写入字符串、数组的方法分析
- php xhprof使用实例详解
- PHP获取远程http或ftp文件的md5值的方法
- PHP addslashes()函数讲解
- PHP+swoole+linux实现系统监控和性能优化操作示例
- PHP中PCRE正则解析代码详解
- tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
- 使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
- python 抓取知乎指定回答下视频的方法
- 基于python实现计算两组数据P值
- PHP getNamespaces()函数讲解
- OpenCV 使用imread()函数读取图片的六种正确姿势
- PHP simplexml_import_dom()函数讲解
- PHP getName()函数讲解
- Laravel框架集成UEditor编辑器的方法图文与实例详解