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