这题的话,坑点挺多的,我也WA了好几次。
首先,对于map,因为是多次使用,所以每次处理完一个图之后就要清空。

其次,就是对于DIjkstra跑图的时候,如果这个图是连通图的话,我们每次选取最小值点是一定可以选到的,但是对于不连通的图,如果任何一个点都不与终点连通,那选取最小值点的时候就一定会选到无穷大点。
所以这时候,如果不对我们之前声明的用来存最小值点标号的变量k赋初值的话,那基本上访问是越界的,k里面的数原本基本上都是几十万,所以我就一直越界啦~
要么就把最小值等于无穷的时候,直接跳出,也是可以的,然后再对vis标记,这样跳出就不会越界了。

而且其实cin读入还挺快的,因为用的是string类,所以用cin读入了,其实直接用scanf读入字符串也是可的。如果关闭cin和stdio的同步,这cin读入相当快。

#include <iostream>
#include <cstring>
#include <string>
#include <map>
using namespace std;
const int INF = 1 << 30;
int n,cnt,flag,t;
int w[160][160];
int d[160];
bool vis[160];
map<string, int> name;void Dijkstra()
{memset(vis, false, sizeof(vis));for (int i = 1; i <= cnt;i++) {d[i] = w[1][i];}vis[1] = 1;d[1] = 0;for (int i = 1; i < cnt; i++){int m=INF, k=0;for (int j = 1; j <= cnt; j++){if (!vis[j] &&m>d[j]) {m=d[j];k = j;}}if (m==INF)break;vis[k] = 1;for (int j = 1; j <= cnt;j++) {if (!vis[j]&&d[j]>d[k]+w[k][j]) {d[j] = d[k] + w[k][j];}}}
}int main()
{ios::sync_with_stdio(false);while (cin>>n&&n!=-1) {if (n==0) {cout << -1 << endl;continue;}for (int i = 0; i < 160;i++) {for (int j = 0; j < 160;j++) {w[i][j] = INF;}}name.clear();cnt = 1;flag = 0;string s, e;cin >> s >> e;if (s==e)flag = 1;name[s] = cnt++;name[e] = cnt++;while (n--) {cin >> s >> e >> t;if (!name[s])name[s] = cnt++;if (!name[e])name[e] = cnt++;if (w[name[s]][name[e]]>t) {w[name[s]][name[e]] = t;w[name[e]][name[s]] = t;}}if (flag) {cout << 0 << endl;continue;}cnt--;Dijkstra();if (d[2]==INF)cout << -1 << endl;elsecout << d[2] << endl;}return 0;
}

转载于:https://www.cnblogs.com/xyqxyq/p/10350138.html

HDU-2112-HDU Today相关推荐

  1. hdu 2112 HDU Today 最短路(Dijkstra算法)

    HDU Today                                                                 Time Limit: 15000/5000 MS ...

  2. HDU 2112 HDU Today (dijkstar + map)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. HDU 2112 HDU Today lt;SPFA算法+map函数gt;

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. hdu 2112 ——HDU Today

    Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD ...

  5. ACM学习历程—HDU 2112 HDU Today(map spfa 优先队列)

    Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线 ...

  6. HDU 2112 HDU Today(最短路)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. HDOJ 2112 HDU Today (最短路 Dijkstra SPFA)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】带权二分图匹配 KM算法

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]最小费用最大流 In the kingdom of Henryy, there are N (2 <= N <= ...

  9. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】最小费用最大流

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]带权二分图匹配 KM算法 In the kingdom of Henryy, there are N (2 <= N & ...

  10. 母函数+例题(hdu 2079+hdu 2082)

    母函数+例题(hdu 2079+hdu 2082) 虽然ACM的确有点力不从心,但是还是贵在坚持,继续啃啃算法..... 昨天一个下午学了学母函数,离散数学+幂级数,只能说nb- 看了半天的原理,结果 ...

最新文章

  1. QM模块常见检验分类术语
  2. eja智能压力变送器工作原理_横河EJA压力变送器在脉冲线路堵塞诊断方法
  3. android+5.0+小米手环,小米手环5和荣耀手环6哪个好-参数对比
  4. 棒棒糖球球机器人_球球大作战刷棒棒糖_球球大作战刷龙蛋攻略
  5. python优先队列,队列和栈
  6. java动手动脑之多态
  7. java swing入门教程_java swing基础(菜鸟教程学习)
  8. c语言c99和c90,C89 / C90,C99和C11的兼容性
  9. 运行c程序的步骤及方法
  10. 用xLang 写 SQL 控制程序
  11. 2018区块链技术及应用峰会(BTA)倒计时2天,最强百人区块链大咖齐聚
  12. 颠覆你的世界观-芝诺悖论
  13. vmware设置桥接时复制物理网络连接状态是什么意思?
  14. 预付费系统中电费电价管理的分析与应用
  15. python-matplotlib库绘制饼形图专题(从一般饼状图到内嵌环形图)
  16. java中浏览器电脑的分辨率_关于移动端适配,你必须要知道的
  17. 用程序编写计算公式的高次方程数字计算机
  18. java ios 3des加密,iOS 3DES加密 和 java 3DES 解密
  19. 2021年科学突破奖:生命科学、基础物理学和数学奖得主揭晓
  20. 2019计算机跨保经验:清(深)北交浙计算所经验

热门文章

  1. html label修改字体颜色,Swift label文字显示不同颜色(字体)
  2. xadmin与mysql数据库_十八、Django3.0学习之引入xadmin
  3. Linux 下wifi 驱动开发(二)—— WiFi模块浅析
  4. Springboot 2.x版本 RedisCacheManager 类的配置,【与1.x 略有不同】
  5. GCC优化选项:一般的文档里不容易找到的-Os
  6. Ubuntu 10.10升级显卡驱动后开机动画低分辨率问题
  7. Windows系统USB转CDC串口驱动限制说明
  8. [react] React怎样引入svg的文件?
  9. 前端学习(3219):对props进行限制
  10. [html] 如何去除标签<i>默认斜体?