Relative Relatives
Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 3339   Accepted: 1462

Description

Today is Ted's 100th birthday. A few weeks ago, you were selected by the family to contact all of Ted's descendants and organize a surprise party. To make this task easier, you created an age-prioritized list of everyone descended from Ted. Descendants of the same age are listed in dictionary order.

The only materials you had to aid you were birth certificates. Oddly enough, these birth certificates were not dated. They simply listed the father's name, the child's name, and the father's exact age when the baby was born.

Input

Input to this problem will begin with line containing a single integer n indicating the number of data sets. Each data set will be formatted according to the following description.

A single data set has 2 components: 

  1. Descendant Count - A line containing a single integer X (where 0 < X < 100) indicating the number of Ted's descendants.
  2. Birth Certificate List - Data for X birth certificates, with one certificate's data per line. Each certificate's data will be of the format "FNAME CNAME FAGE" where: 
    • FNAME is the father's name.
    • CNAME is the child's name.
    • FAGE is the integer age of the father on the date of CNAMEs birth.

Note:

  • Names are unique identifiers of individuals and contain no embedded white space.
  • All of Ted's descendants share Ted's birthday. Therefore, the age difference between any two is an integer number of years. (For those of you that are really picky, assume they were all born at the exact same hour, minute, second, etc... of their birth year.)
  • You have a birth certificate for all of Ted's descendants (a complete collection).

Output

For each data set, there will be X+1 lines of output. The first will read, "DATASET Y", where Y is 1 for the first data set, 2 for the second, etc. The subsequent X lines constitute your age-prioritized list of Ted's descendants along with their ages using the format "NAME AGE". Descendants of the same age will be listed in dictionary order.

Sample Input

2
1
Ted Bill 25
4
Ray James 40
James Beelzebub 17
Ray Mark 75
Ted Ray 20

Sample Output

DATASET 1
Bill 75
DATASET 2
Ray 80
James 40
Beelzebub 23
Mark 5
题目大意:Ted近年100岁,给出n行,每行有两个字符串和一个数字,第一个字符串为父亲的名字,后面为儿子的名字以及父亲比儿子大多少岁,输出整个家族中除了Ted之外所有人的年龄,按年龄从大到小输出,如果年龄相同,则按照名字字典序从小到大输出。
#include <stdio.h>
#include <string>
#include <map>
#include <algorithm>
#include <vector>
#include <iostream>
#include <queue>
using namespace std; typedef struct
{
int age;
string name;
}Person; //父亲和儿子名字键值对
multimap<string, string> father_son;
//儿子和儿子年龄键值对
map<string, int> son_age;
//儿子和儿子比父亲少多少岁键值对
map<string, int> person_toage;
//家族中每个成员
vector<Person> Family; bool cmp(const Person &p1, const Person &p2)
{
if (p1.age == p2.age)
{
return p1.name < p2.name;
}
else
{
return p1.age > p2.age;
}
} //用BFS遍历得出家族中每个人的年龄
void BFS()
{
queue<pair<string, int> > Queue;
Queue.push(make_pair("Ted", ));
while(!Queue.empty())
{
pair<string, int> p = Queue.front();
Queue.pop();
int nCount = father_son.count(p.first);
if (nCount != )
{
//遍历父亲的所有儿子
multimap<string, string>::iterator iter;
for (iter = father_son.lower_bound(p.first); iter != father_son.upper_bound(p.first); iter++)
{
//儿子的年龄等于父亲的年龄减去父子年龄之差
son_age[iter->second] = p.second - person_toage[iter->second];
Person temp;
temp.name = iter->second;
temp.age = son_age[iter->second];
Family.push_back(temp);
//将当前儿子入队,作为后序的父亲
Queue.push(make_pair(iter->second, son_age[iter->second]));
}
}
}
} int main()
{
int nCase, n, age, nDataset = ;
string father, son;
cin>>nCase;
while(nCase--)
{
cin>>n;
father_son.clear();
son_age.clear();
person_toage.clear();
Family.clear();
son_age.insert(make_pair("Ted", ));
++nDataset;
for (int i = ; i < n; i++)
{
cin>>father>>son>>age;
father_son.insert(make_pair(father, son));
person_toage.insert(make_pair(son, age));
}
BFS();
sort(Family.begin(), Family.end(), cmp);
cout<<"DATASET "<<nDataset<<endl;
for (vector<Person>::iterator iter = Family.begin(); iter != Family.end(); iter++)
{
cout<<iter->name<<" "<<iter->age<<endl;
}
}
return ;
}

POJ 2021 Relative Relatives的更多相关文章

  1. poj 2021 Relative Relatives(暴力)

    题目链接:http://poj.org/problem?id=2021 思路分析:由于数据较小,采用O(N^2)的暴力算法,算出所有后代的年龄,再排序输出. 代码分析: #include <io ...

  2. POJ 2021 Relative Relatives(map+树的遍历)

    题意: 今天是Ted的100岁生日.凑巧的是,他家族里面每个人都跟他同一天生日,但是年份不同. 现在只给出一些 父亲的名字,孩子的名字,以及孩子出生时父亲的年龄, 要求将Ted以外的家族成员按年龄降序 ...

  3. POJ 2407:Relatives(欧拉函数模板)

    Relatives AC代码 Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16186   Accept ...

  4. POJ 2021

    #include <iostream> #include <string> #include <algorithm> #define MAXN 105 using ...

  5. 【POJ 2407】 Relatives

    [题目链接] 点击打开链接 [算法] 欧拉函数 [代码] #include <algorithm> #include <bitset> #include <cctype& ...

  6. 【poj 2407】Relatives(数论--欧拉函数 模版题)

    题意就是求10^9以内的正整数的欧拉函数(Φ(n)表示<=n的与n互质的正整数个数). 解法:用欧拉筛和欧拉函数的一些性质:    1.若p是质数,Φ(p)=p-1:    2.欧拉函数是积性函 ...

  7. HOJ题目分类

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

  8. OJ题解记录计划

    容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001  A+B Problem First AC: 2 ...

  9. 这些MongoDB的隐藏操作你真的都掌握了吗?反正我是刚知道

    背景 最近公司系统还原用户时偶尔会出现部分用户信息未还原成功的问题,最为开发人员,最头疼的不是代码存在bug,而是测试发现了bug,但一旦我去重现,它就不见了.Are you kidding me? ...

随机推荐

  1. 【UWP】【新坑】Excel批量翻译工具(1)

    嗯……具体思路是这样的.使用的时候,你导入一个excel,直观地选择某些区域,选择语言点击翻译,就可以对多个单元格进行批量翻译,并且支持多种不同的导出格式(excel副本.txt文件……) 1,多种翻 ...

  2. 将Java应用部署到SAP云平台neo环境的两种方式

    方法1 - 使用Eclipse Eclipse里新建一个服务器: 服务器类型选择SAP Cloud Platform: 点Finish,成功创建了一个Server: Eclipse里选择要部署的项目, ...

  3. 关于 NetBackup 应答文件(/tmp/NBInstallAnswer.conf)

    关于 NetBackup 应答文件 在 UNIX 和 Linux 安装和升级期间使用 NetBackup 应答文件 (/tmp/NBInstallAnswer.conf),以便: 覆盖某些默认值. 避 ...

  4. Beta冲刺(周五)

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 这个作业要求在哪里 https://edu.cnblo ...

  5. 2018.3.5 Java语言基础与面向对象编程实践

    Java语言基础与面向对象编程实践 第一章 初识Java 1.Java特点 http://www.manew.com/blog-166576-20164.html Java语言面向对象的 Java语言 ...

  6. DROP RULE - 删除一个重写规则

    SYNOPSIS DROP RULE name ON relation [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP RULE 删除一个规则. PARAMETE ...

  7. javaweb基础(7)_HttpServletResponse原理详解

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...

  8. ajax的序列化表单提交

    通过传统的 form 表单提交的方式上传文件 ? 1 2 3 4 <form id="uploadForm" action="" method=" ...

  9. HTML5<figure>元素

    HTML5<figure>元素是用来定义页面文档中独立的流内容(图像,图表,照片,代码块),figure内容与主内容有关,如果被删除,则不影响主文档流的产生. HTML5<figca ...

  10. cocos2dx 通过jni调用安卓底层方法

    cocos2dx通过封装JniHelper类来调用安卓api底层函数,该文件在cocos/platform/android/jni/JniHelper.h,使用方法如下: 打开eclipse,导入co ...