[hihocoder] #1716 : 继承顺位(dfs深搜)
描述
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深搜)相关推荐
- #1716 : 继承顺位(dfs)
描述 H国的国王有很多王子,这些王子各自也都有很多王孙,王孙又各自有很多后代-- 总之,H国王族的族谱形成了一棵以国王为根的树形结构. 根据H国的法律,王族的继承顺位这样规定的: 假设A和B是两位王族 ...
- hihocoder #1716 : 继承顺位
描述 H国的国王有很多王子,这些王子各自也都有很多王孙,王孙又各自有很多后代-- 总之,H国王族的族谱形成了一棵以国王为根的树形结构. 根据H国的法律,王族的继承顺位这样规定的: 假设A和B是两位王族 ...
- 2020 年百度之星·程序设计大赛 - 初赛一 GPA DFS深搜
problem GPA Accepts: 1554 Submissions: 3947 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327 ...
- [USACO13FEB]Perimeter【DFS / 深搜】
Pro Luogu3072 Sol 这题的话,我就把我的想做当做反例给说一下. 错误想法:很容易的发现,一个不规则的图形,我们可以通过转换为规则的矩形来求周长,可以平移一些边来求得,但是存在反例. 如 ...
- 部分和(dfs深搜回溯法)
问题描述 给定整数序列a1,a2,.,an,判断是否可以从中选出若干数,使它们的和恰好为k, 1<=n<=20 -10^8<=ai<=10^8 -10^8<=k<= ...
- dfs深搜--八皇后问题
题目描述 一个如下的 6×66 \times 66×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用 ...
- 数独游戏(dfs深搜)
问题描述 如下所示,玩家需要根据9*9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个色九宫内的数字均含1-9,不重复 数独的答案都是唯一的,所以,多个解也称为无解 本图的数字 ...
- 【DFS深搜】四色问题
题目 问题描述: 设有图4-11所示地图,每个区域代表一个省,区域中的数字代表省的编号,今将每个省涂上红(R),兰(B),黄(Y),白(W)四种颜色之一,使相邻的省份不同颜色,且第一种颜色必须填1. ...
- DFS深搜与BFS广搜专题
一般搜索算法的流程框架 DFS和BFS与一般搜索流程的关系 如果一般搜索算法流程4使用的是stack栈结构(先进后出,后进先出)那么就会越搜越深.即,DFS,DFS只保存当前一条路径,其目的是枚举出所 ...
最新文章
- typescript设置默认值_TypeScript 中神奇的 this 类型声明
- Hive旺旺讨论(关于mapjoin)
- 图像的全局特征--用于目标检测
- python变量和运算符
- iBatis 2.x 和 MyBatis 3.0.x 的区别
- 信息学奥赛一本通 1042:奇偶ASCII值判断 | OpenJudge NOI 1.4 04
- WebServicenbsp;创建nbsp;nbsp;发布nbsp;调用整个流…
- 微软新闻推荐:深度学习与 NLP 的融合, 
让 Windows 11“新闻与兴趣”知你所需...
- [原创]聊聊如何在职场中发邮件
- 第1篇--基于jdk7和jdk8分析 JVM的内存区域
- (转)LuaPlus C++ 函数互调
- 字节跳动教育业务怎么样_字节跳动将重点关注教育业务,今年预计招聘超过一万人...
- 手机背景图片在安卓手机上不显示
- Python 练习题
- java教学视频平台系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
- 计算机病毒教学评课,计算机病毒评课稿样稿.doc
- 高德地图怎么搜索marker_高德地图——通过地名标注marker
- Linux wifi自动连接脚本
- Apache ECharts的缘起和发展
- dotnet 读 WPF 源代码笔记 WriteableBitmap 的渲染和更新是如何实现