题意:建一个家庭树,找出有第d代子孙的名字,按照要求的第d代子孙的数从大到小输出三个人名,如果有一样大小子孙数的,就按字母序从小到大将同等大小的都输出,如果小于三个人的就全输出。

题目链接:http://poj.org/problem?id=2732

分析:数据量很小,直接建树,枚举暴力输出。我直接套模板用map建树的。

注意:1.每次测试数据时要清空map和vector!!!

2.注意输出要从大到小输出答案,如果答案有一样的按名字的字母序从小到大输出。答案用vector保存,vector排序:sort(v.begin(),v.end(),cmp);

3.注意嵌套模板的使用,map<string,vector<string> >fa;

另,关于建树,可以直接用int类型代替名字的string类型,给每个名字赋予一个编号。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
string name[];
map<string,int>mp;
map<string,vector<string> >fa;
vector<pair<string,int> >ans;
vector<string>v;
int fin(string na,int gen)
{
int ans=;
if(gen==)
return ;
for(int i=;i<mp[na];i++)
{
if(gen>=)
ans+=fin(fa[na][i],gen-);
}
return ans;
}
int cmp(pair<string,int>p1,pair<string,int>p2)
{
if(p1.second==p2.second)
return p1.first<p2.first;
return p1.second>p2.second;
}
int main()
{
int t,cnt=;
cin>>t;
while(t--)
{
fa.clear(); //每次样例注意清空数据
ans.clear();
mp.clear();
int n,d;
cin>>n>>d;
int num;
for(int i=;i<n;i++)
{
cin>>name[i];
cin>>num;
string child;
mp[name[i]]=num;
v.clear();
for(int j=;j<num;j++)
{
cin>>child;
v.push_back(child);
}
fa[name[i]]=v; //嵌套模板的使用
}
for(int i=;i<n;i++)
{
int res=fin(name[i],d);
if(res>)
ans.push_back(make_pair(name[i],res));
}
int len=ans.size();
sort(ans.begin(),ans.end(),cmp);
printf("Tree %d:\n",cnt);
for(int i=;i<len;i++) //注意答案的输出
{
if((i>)&&ans[i].second!=ans[i-].second)
break;
cout<<ans[i].first<<" "<<ans[i].second<<endl;
}
cnt++;
}
return ;
}

最新文章

  1. C++异常处理
  2. C语言_第三章
  3. [2016.01.18]文本替换专家 v5.3
  4. 【leetcode】Rotate List(middle)
  5. Linux环境下搭建Tomcat+mysql+jdk
  6. 从代码分析Android-Universal-Image-Loader的图片加载、显示流程
  7. MySQL不能插入中文字符及中文字符乱码问题
  8. 修复ORACLETNS-12545 因目标主机或对象不存在错误
  9. Good Number
  10. php-工厂模式(转)
  11. 可以支持jQuery1.10.1 的 fancybox 1.3.4, 並現在type為Ajax時,也可以定義窗口的大小。
  12. BrowserSync,调试利器--自动刷新(转
  13. java通过反射获取调用变量以及方法
  14. 【转】ASP.NET MVC教程
  15. centos和Ubuntu区别
  16. SSH2配置事务的两种方式
  17. shell脚本之变量与状态码
  18. .NET平台开源项目速览(21)Cron任务调度CronNET
  19. Eclipse 基础操作与设置
  20. Android热补丁技术—dexposed原理简析(手机淘宝采用方案)

热门文章

  1. centos 配置 ssl服务
  2. 下载最新版本的Oracle Database
  3. Bitnami Redmine插件记录
  4. plsql连接本地数据库
  5. vueJs+webpack单页面应用--vue-router配置
  6. wf(六)
  7. ADB server didn&#39;t ACK * failed to start daemon *
  8. HTML 5 视频
  9. 中文 iOS/Mac 开发博客列表(转)
  10. angularJS: shop chart