POJ 2021 Relative Relatives(map+树的遍历)
题意:
今天是Ted的100岁生日。凑巧的是,他家族里面每个人都跟他同一天生日,但是年份不同。
现在只给出一些 父亲的名字,孩子的名字,以及孩子出生时父亲的年龄,
要求将Ted以外的家族成员按年龄降序排序,如果年龄相同,则按字母排序。
思路:遍历树。
根据题意,可通过父子关系建立一个有权无向树,Ted作为树的根节点。通过从Ted所在节点开始遍历树,给每个节点赋值。
最后根据每个成员的年龄排序即可。
这里用到map,建立名字到编号的映射,从而获取一个人在树中的节点编号。
#include <iostream>
#include <stdio.h>
#include <map>
#include <string>
#include <string.h>
#include <vector>
#include <algorithm> using namespace std;
map<string,int> person;
int n; //即题目中的X值 struct Line{
string fname; //父亲的名字
string cname; //孩子的名字
int fage; //孩子出生时,父亲的年龄
}line[];
struct Node{
string name; //名字
int age; //年龄
int fage; //出生时父亲的年龄,则该节点的年龄=父亲的年龄-fage
vector<int> son; //存储孩子的编号
bool operator<(const Node tmp)const{
if(age==tmp.age)
return name<tmp.name;
else
return age>tmp.age;
}
}node[]; //遍历,求节点的年龄
void dfs(int u){
for(int i=;i<node[u].son.size();i++){
int v=node[u].son[i];
node[v].age=node[u].age-node[v].fage;
dfs(v);
}
}
int main()
{
int t;
scanf("%d",&t);
for(int q=;q<=t;q++){
printf("DATASET %d\n",q);
person.clear();
for(int i=;i<;i++)
node[i].son.clear(); int idx=;
person["Ted"]=++idx;
scanf("%d",&n);
for(int i=;i<=n;i++){
cin>>line[i].fname>>line[i].cname>>line[i].fage;
//如果不存在该字符串的映射,即映射为0,则建立映射关系
if(!person[line[i].fname])
person[line[i].fname]=++idx;
if(!person[line[i].cname]){
person[line[i].cname]=++idx;
}
}
//根节点
node[].name="Ted";
node[].age=;
int u,v;
for(int i=;i<=n;i++){
u=person[line[i].fname];
v=person[line[i].cname];
node[u].name=line[i].fname;
node[u].son.push_back(v);
node[v].name=line[i].cname;
node[v].fage=line[i].fage;
} dfs();
sort(node+,node+idx+);
for(int i=;i<=idx;i++){
if(node[i].name!="Ted")
cout<<node[i].name<<" "<<node[i].age<<endl;
}
}
return ;
}
POJ 2021 Relative Relatives(map+树的遍历)的更多相关文章
- POJ 2021 Relative Relatives
Relative Relatives Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3339 Accepted: 146 ...
- poj 2021 Relative Relatives(暴力)
题目链接:http://poj.org/problem?id=2021 思路分析:由于数据较小,采用O(N^2)的暴力算法,算出所有后代的年龄,再排序输出. 代码分析: #include <io ...
- POJ 2001 Shortest Prefixes(字典树)
题目地址:POJ 2001 考察的字典树,利用的是建树时将每个点仅仅要走过就累加.最后从根节点開始遍历,当遍历到仅仅有1次走过的时候,就说明这个地方是最短的独立前缀.然后记录下长度,输出就可以. 代码 ...
- pat 团体天梯赛 L2-006. 树的遍历
L2-006. 树的遍历 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历 ...
- 天梯赛L2-006. 树的遍历L3-010. 是否完全二叉搜索树
L2-006. 树的遍历 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历 ...
- L2-006. 树的遍历(不建树)
L2-006. 树的遍历 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树中结点 ...
- Map三种遍历方式
Map三种遍历方式 package decorator; import java.util.Collection; import java.util.HashMap; import java.util ...
- 数据结构--树(遍历,红黑,B树)
平时接触树还比较少,写一篇博文来积累一下树的相关知识. 很早之前在数据结构里面学的树的遍历. 前序遍历:根节点->左子树->右子树 中序遍历:左子树->根节点->右子树 后序遍 ...
- YTU 3023: 树的遍历
原文链接:https://www.dreamwings.cn/ytu3023/2617.html 3023: 树的遍历 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 2 题 ...
随机推荐
- SAP CRM 项目笔记(一) SOW(工作说明书)讨论
前记 前两天在搜索资料时,看到一个网友在博客里面记录下了自己参于项目中的所有笔记.我觉得这个想法很不错,所以决定开笔记录下SAP CRM整个项目的实施和开发过程. 之前参加集团的SAP ERP(FI/ ...
- Lambda前世今生
1.学习资料 匿名函数 C#编程指南http://msdn.microsoft.com/zh-cn/library/bb882516.aspx Lambda表达式 C#编程指南http://msdn. ...
- Linux I/O总结
文件流 标准I/O文件流可用于单字节或多字节字符集.流的定向决定了所读写的是单字节还是多字节.流在最初创建时,并没有定向,此时如果在为定向的流上使用多字节I/O函数,那么该流被设置为宽定向的:如果在为 ...
- C# 执行Cmd窗口中的命令 [复制文件实例]
/// <summary> /// 复制文件夹 /// </summary> /// <param name="sCmd"></param ...
- 68.vivado与modelsim的关联以及器件库编译
vivado软件中也自带仿真工具,但用了几天之后感觉仿真速度有点慢,至少比modelsim慢挺多的.而modelsim是我比较熟悉的一款仿真软件,固然选它作为设计功能的验证.为了将vivado和mod ...
- ASP.NET Web API 实例
ASP.NET Web API 入门大杂烩 创建Web API解决方案,命名为VCoinWebApi,并且创建了同名的Project,然后,创建一个Empty Project:Models,创建一个W ...
- .gitignore无效,不能过滤某些文件
利用.gitignore过滤文件,如编译过程中的中间文件,等等,这些文件不需要被追踪管理. 现象: 在.gitignore添加file1文件,以过滤该文件,但是通过git status查看仍显示fil ...
- VS2013 help viewer搜索结果显示源码以及桌面独立运行help viewer
安装好VS2013后,启动help viewer2.1在搜索栏中搜搜时结果会出现HTML源码. 要解决这个问题先来看看MINE,即Multipurpose Internet Mail Extensio ...
- Careercup - Microsoft面试题 - 5684901156225024
2014-05-10 23:45 题目链接 原题: Arrange the numbers in an array in alternating order. For example if the a ...
- OpenCms 集成外部Solr Server
OpenCms默认是以内嵌的Solr作为全文搜索服务的,不过我们也可以配置一个独立的Solr搜索服务器 设置外部Solr Server 1. 从Solr 官方站点http://lucene.apach ...