这道题说的是一个路径(A->B->C->…)被拆散成很多step(B->C;A->B;…),要根据step还原路径。节点都是用string表示的。

如果用map来表示step的话,那么只要能找到路径的起点,就很容易根据step之间的关系还原路径,只需不断在map里将上一个step的value作为key来查找即可得到下一step的value。所以关键就是找到起点,起初我想同样利用此map来查找起点,结果发现找终点很容易(以终点作为key查不到value),但是起点就很难,要O(N*N)。后来想到一个很简单的办法可以在O(N)内找到起点:由于已知条件是所有step(形容A->B),所以如果记录每个step里的两个string,那么最终下来,除了起点和终点只出现一次外,其余中间各点都应该出现过两次,只需找到这两个点再稍加判断就能得到起点,典型的判重问题,或者说查找出现过指定次数的点,自然就想到要用map。于是,问题迎刃而解。

代码如下:

#include <iostream> #include <map> #include <string> #include <vector> using namespace std; map<string,string> ssmap; map<string,int> simap; int main() { int count; cin>>count; for (int i = 1;i <= count;i++) { ssmap.clear(); simap.clear(); vector<string> vs; int stepNum; cin>>stepNum; string str1,str2; for (int j = 0;j < stepNum-1;j++) { cin>>str1>>str2; ssmap[str1] = str2; simap[str1]++; simap[str2]++; } string head_tail[2]; int k = 0; for (map<string,int>::iterator it = simap.begin();it != simap.end();it++) { if(it->second==1) { head_tail[k++]=it->first; } } string head; for (int j = 0;j < 2;j++) { if(ssmap[head_tail[j]].size()==0) { head = head_tail[1-j]; } } cout<<"Scenario #"<<i<<":"<<endl<<head<<endl; while (ssmap[head].size()!=0) { cout<<ssmap[head]<<endl; head = ssmap[head]; } cout<<endl; } }

POJ 2491 Scavenger Hunt 解题报告 再次利用map判重相关推荐

  1. POJ 1066 Treasure Hunt 解题报告

    这道题的大概意思就是在一座金字塔的底部,有一个宝藏,但是底部这一层里面有很多纵横交错的墙,而宝藏就在其中一个由这些墙构成的房间里面.每面墙的两头都在金字塔最外面的四周的墙上.然后需要在每面墙的中间开一 ...

  2. POJ 2800 垂直直方图 解题报告

    POJ 2800 垂直直方图 解题报告 编号:2800   考查点:简单计算题 思路: 用gets()读入4行数据,然后按字符统计,显示的时候有点小处理即可. 提交情况: 感觉POJ的测试数据有点骗人 ...

  3. Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)

    http://blog.csdn.net/geniusluzh/article/details/6619575 在说Tarjan算法解决桥和边双连通分量问题之前我们先来回顾一下Tarjan算法是如何求 ...

  4. POJ 1797 Heavy Transportation 解题报告

    分类:图论,生成树,最短路,并查集 作者:ACShiryu 时间:2011-7-28 地址:ACShiryu's Blog Heavy Transportation Time Limit: 3000M ...

  5. POJ 2977 生理周期 解题报告

    2977 : 生理周期 总时间限制: 1000ms 内存限制: 65536kB 描述 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高 ...

  6. POJ 1001 Exponentiation C++解题报告 JAVA解题报告

    求高精度幂 Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 126980   Accepted: 30980 Descripti ...

  7. poj 2182 Lost Cows 解题报告

    题意:每个奶牛都有一个编号,1- N 从第二个牛开始给出前面比她编号小的牛的个数,问你求牛的编号序列 解题思路:线段树+ 二分查找 (多个相同的数二分边界问题需要注意) 解题代码: 1 #includ ...

  8. poj 1325 Machine Schedule 解题报告

    题目链接:http://poj.org/problem?id=1325 题目意思:有 k 个作业,机器A有 n 个模式:0 ~ n-1,机器B 有 m 个模式:0~ m-1.每一个作业能运行在 A 的 ...

  9. Poj 1451 JAVA 个人解题报告

    AC 时间 334ms,内存 3000k 题目大意: 模拟手机键盘的九宫格输入模式,每当输入单词,就会显示可能的单词, 根据每个单词的可能性. 这个可能性就是输入列表里跟随每个单词后面的那个正整数. ...

最新文章

  1. postman模拟文件上传接口
  2. java和python对比----1:
  3. 反射工厂在数据访问层的应用
  4. 4-1.最大子数组分治法实现
  5. ubuntu删除OpenCV
  6. python线程池超过最大数量_讨论一下Python线程池大小设置?
  7. 基于Spring的医院药品管理系统的设计与实现
  8. pip下载python包
  9. 美学心得(第二百二十五集)罗国正
  10. 数据库:主键外键作用
  11. 医学图像处理与深度学习入门
  12. 《肖申克的救赎》观后感
  13. 3步释放工作和生活压力
  14. EOS基础全家桶(四)启动节点
  15. 【踩坑专栏】Field xxFeignClient in xxx required a bean of type ‘xxx.XXFeignClient‘ that could not be found
  16. 佛说父母恩难报经原文、译文
  17. 毕业设计-基于微信小程序的点餐系统
  18. java之集合Collection之List接口总结
  19. 如何快速实现离散企业全链路数字化管理?
  20. 2023.0329MySQL数据库

热门文章

  1. ai人工智能相关职业_2020年及以后的5个人工智能最佳职业
  2. 什么是运营商大数据精准获客?
  3. rd630服务器raid修复,联想服务器rd630做raid5系统.pdf
  4. 认识图,用矩阵表示图
  5. 58同城2020校招转转算法岗笔试编程题
  6. 显卡测试软件3d mark,AllBenchmark(3D显卡测试工具)1.3 免费版
  7. 棋牌开发需要注意哪些事项
  8. Android每日一文
  9. 又一篇!天昊生物微生物16S扩增子绝对定量测序技术再发好文
  10. 局域网arp攻击_如何排查ARP网络攻击