时间限制: 10000ms
单点时限: 1000ms
内存限制: 256MB

描述

H国的国王有很多王子,这些王子各自也都有很多王孙,王孙又各自有很多后代…… 总之,H国王族的族谱形成了一棵以国王为根的树形结构。

根据H国的法律,王族的继承顺位这样规定的:

假设A和B是两位王族

1. 如果其中一位是另一位的直系父亲、祖先,则辈份高的王族继承顺位更高

2. 否则,假设C是A和B的最近公共祖先。显然A和B一定是C的两位不同子嗣的后代。其中C较年长的子嗣的后代的继承顺位更高

按时间顺序给出所有国王后代的出生和死亡记录,请你计算所有还活着的后代的继承顺位。

输入

第一行包含一个整数N和一个只包含大写字母和数字的字符串,分别代表记录的条数和国王的名字。

以下N行每行包含一条记录:

birth name1 name2 代表name1的儿子name2出生

death name 代表name死亡

1 <= N <= 10000

名字长度不超过20,并且没有重名的王族。

输出

按继承顺位从高到低输出每位王族的名字。(不包括国王)

每个名字一行。

样例输入

4 KING
birth KING ALI
birth KING BOB
birth ALI CARRO
death ALI

样例输出

CARRO
BOB

一个比较特别的深搜题,为了方便用了map做了处理

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
#define inf 0x3f3f3f
#define ll long long
#define mod 1000000007
using namespace std;
map< string , queue<string> > m;
map<string,int> d;
void dfs(string s)
{while(!m[s].empty()){string name=m[s].front();if(d[name]!=1){cout<<name<<endl;}dfs(name);m[s].pop();}
}
int main()
{int n,i;string king,f,fname,cname,dead;cin>>n;cin>>king;d[king]=1;for(i=0;i<n;i++){cin>>f;if(f=="birth"){cin>>fname>>cname;m[fname].push(cname);}else{cin>>dead;d[dead]=1;}}dfs(king);
}

[hihocoder] #1716 : 继承顺位(dfs深搜)相关推荐

  1. #1716 : 继承顺位(dfs)

    描述 H国的国王有很多王子,这些王子各自也都有很多王孙,王孙又各自有很多后代-- 总之,H国王族的族谱形成了一棵以国王为根的树形结构. 根据H国的法律,王族的继承顺位这样规定的: 假设A和B是两位王族 ...

  2. hihocoder #1716 : 继承顺位

    描述 H国的国王有很多王子,这些王子各自也都有很多王孙,王孙又各自有很多后代-- 总之,H国王族的族谱形成了一棵以国王为根的树形结构. 根据H国的法律,王族的继承顺位这样规定的: 假设A和B是两位王族 ...

  3. 2020 年百度之星·程序设计大赛 - 初赛一 GPA DFS深搜

    problem GPA Accepts: 1554 Submissions: 3947 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327 ...

  4. [USACO13FEB]Perimeter【DFS / 深搜】

    Pro Luogu3072 Sol 这题的话,我就把我的想做当做反例给说一下. 错误想法:很容易的发现,一个不规则的图形,我们可以通过转换为规则的矩形来求周长,可以平移一些边来求得,但是存在反例. 如 ...

  5. 部分和(dfs深搜回溯法)

    问题描述 给定整数序列a1,a2,.,an,判断是否可以从中选出若干数,使它们的和恰好为k, 1<=n<=20 -10^8<=ai<=10^8 -10^8<=k<= ...

  6. dfs深搜--八皇后问题

    题目描述 一个如下的 6×66 \times 66×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用 ...

  7. 数独游戏(dfs深搜)

    问题描述 如下所示,玩家需要根据9*9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个色九宫内的数字均含1-9,不重复 数独的答案都是唯一的,所以,多个解也称为无解 本图的数字 ...

  8. 【DFS深搜】四色问题

    题目 问题描述: 设有图4-11所示地图,每个区域代表一个省,区域中的数字代表省的编号,今将每个省涂上红(R),兰(B),黄(Y),白(W)四种颜色之一,使相邻的省份不同颜色,且第一种颜色必须填1. ...

  9. DFS深搜与BFS广搜专题

    一般搜索算法的流程框架 DFS和BFS与一般搜索流程的关系 如果一般搜索算法流程4使用的是stack栈结构(先进后出,后进先出)那么就会越搜越深.即,DFS,DFS只保存当前一条路径,其目的是枚举出所 ...

最新文章

  1. typescript设置默认值_TypeScript 中神奇的 this 类型声明
  2. Hive旺旺讨论(关于mapjoin)
  3. 图像的全局特征--用于目标检测
  4. python变量和运算符
  5. iBatis 2.x 和 MyBatis 3.0.x 的区别
  6. 信息学奥赛一本通 1042:奇偶ASCII值判断 | OpenJudge NOI 1.4 04
  7. WebServicenbsp;创建nbsp;nbsp;发布nbsp;调用整个流…
  8. 微软新闻推荐:深度学习与 NLP 的融合, 让 Windows 11“新闻与兴趣”知你所需...
  9. [原创]聊聊如何在职场中发邮件
  10. 第1篇--基于jdk7和jdk8分析 JVM的内存区域
  11. (转)LuaPlus C++ 函数互调
  12. 字节跳动教育业务怎么样_字节跳动将重点关注教育业务,今年预计招聘超过一万人...
  13. 手机背景图片在安卓手机上不显示
  14. Python 练习题
  15. java教学视频平台系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  16. 计算机病毒教学评课,计算机病毒评课稿样稿.doc
  17. 高德地图怎么搜索marker_高德地图——通过地名标注marker
  18. Linux wifi自动连接脚本
  19. Apache ECharts的缘起和发展
  20. dotnet 读 WPF 源代码笔记 WriteableBitmap 的渲染和更新是如何实现

热门文章

  1. 拉普拉斯特征映射(Laplacian Eigenmaps, LE)
  2. PCB行业ERP解决方案!重点推荐!!!
  3. PCIE协议解析 synopsys IP Power Management Capability 读书笔记(10)
  4. 嵌入式Linux设备驱动面试题汇总
  5. 老旧空间装配式装修改造
  6. 文本处理工具简单介绍
  7. mysql查询死锁语句_MYSQL查询数据库死锁和事务的语句
  8. 百度沈抖发布新一代云战略:云智一体,深入产业
  9. 关于女生学习信息学奥赛
  10. 【Java案例】商品入库