题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112

题目意思:又是求最短路的,不过结合埋字符串来考查。

受之前1004 Let the Balloon Rise 学到用map 的解法做之后,有点蠢蠢欲动,当时见到要用字典树做有点吓坏了(之前看过下,非一般难理解,所以暂时放下了)。于是,死就死吧,硬住头皮用map做,反反复复修改终于过了。

首先是memory limit exceeded,因为无读清题目意思,直接开10000 * 10000的数组= =。细心留意这句话:note:一组数据中地名数不会超过150个。表示150 * 150 的数组即可!!

接着就一直wa了,原因:无把map 清空!注意注意啊,用 STL 的时候要特别注意。还有一个就是起点与终点重合应该输出0,不可达输出-1,否则输出结果。

还有一个小细节,代码中的 l 不要贪方便写在    for (int i = 0; i < n; i++)   循环里面,因为出了这个循环之后,l 对其他部分是不可见的,默认变为0。而我们是需要 l 的值,因为它记录了每个站名依次对应的编号。

呕心沥血版,新鲜出炉啊~~~~

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string> // 这个头文件不能缺,否则会CE
#include <map>
using namespace std; const int INF = 0xffffff;
const int maxn = + ;
int dist[maxn], grid[maxn][maxn], vis[maxn];
int n, l, cost, flag;
map<string, int> zhan; void Init()
{
memset(grid, , sizeof(grid)); // 这个也是关键,因为下面的if (!grid[i][j]) 要用到,表示无边直接相连的点的距离设为INF
zhan.clear(); // 关键关键!!!!
flag = , l = ;
string tmp1, tmp2;
cin >> tmp1 >> tmp2;
if (tmp1 == tmp2)
flag = ;
zhan[tmp1] = ; // 起点为1,终点为2
zhan[tmp2] = ;
for (int i = ; i < n; i++) // 为每个站名编号
{
cin >> tmp1 >> tmp2 >> cost;
if (zhan[tmp1] == )
{
zhan[tmp1] = l;
l++;
}
if (zhan[tmp2] == )
{
zhan[tmp2] = l;
l++;
}
grid[zhan[tmp1]][zhan[tmp2]] = grid[zhan[tmp2]][zhan[tmp1]] = cost;
}
for (int i = ; i < l; i++)
{
for (int j = ; j < l; j++)
{
if (!grid[i][j])
grid[i][j] = grid[j][i] = INF;
}
}
dist[] = ; // 离自己的距离为0
for (int i = ; i < l; i++) // 求出其他站离它的距离是多少
dist[i] = grid[][i];
} void Dijkstra()
{
memset(vis, , sizeof(vis));
for (int i = ; i < l; i++)
{
int u;
int maxx = INF;
for (int j = ; j < l; j++)
{
if (!vis[j] && dist[j] < maxx)
maxx = dist[u = j];
}
vis[u] = ;
for (int j = ; j < l; j++)
{
if (dist[j] > dist[u] + grid[u][j])
dist[j] = dist[u] + grid[u][j];
}
}
if (flag) // 代表起点与终点重合!
printf("0\n");
else
printf("%d\n", dist[] == INF ? - : dist[]);
} int main()
{
while (scanf("%d", &n) && n != -) // n: 城市, m:道路
{
Init();
Dijkstra();
}
return ;
}

hdu 2112 HDU Today 解题报告的更多相关文章

  1. HDU 4303 Hourai Jeweled 解题报告

    HDU 4303 Hourai Jeweled 解题报告 评测地址: http://acm.hdu.edu.cn/showproblem.php?pid=4303 评测地址: https://xoj. ...

  2. HDU 2112 HDU Today 最短路

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

  3. hdu 2112 HDU Today

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的 ...

  4. HDU 2112 HDU Today(Dijkstra)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others ...

  5. hdu 2544 最短路 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目意思:给出 n 个路口和 m 条路,每一条路需要 c 分钟走过.问从路口 1 到路口 n 需 ...

  6. hdu 1972.Printer Queue 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1972 题目意思:需要模拟打印机打印.打印机里面有一些 job,每个job被赋予1-9的其中一个值,越大 ...

  7. hdu 1014.Uniform Generator 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1014 题目意思:给出 STEP 和 MOD,然后根据这个公式:seed(x+1) = [seed(x) ...

  8. hdu 1098 Lowest Bit 解题报告

    题目链接:http://code.hdu.edu.cn/game/entry/problem/show.php?chapterid=1&sectionid=2&problemid=22 ...

  9. hdu 1232 畅通工程 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 并查集入门题.最近在学并查集,它无非包括三个操作:make_set(x).union_set(x ...

随机推荐

  1. 巴厘岛的雕塑 BZOJ 4069

    巴厘岛的雕塑 题解: 题意是要求分组使每组的和按位取或的值最小 那么考虑贪心,尽量使高位为0 于是枚举位置,从最高位枚举 假设当前枚举到第l位. 令 f[i][j] 表示前 i 个数分成 j 组,满足 ...

  2. 在 IntelliJ IDEA 中为自己设计的类库生成 JavaDoc

    因为某个项目需要,为团队其他兄弟姐妹开发了一个 XML 分析处理器,并将其设计为一个类库,提供相应的 API 接口.为了方便大家的使用,需要生成对应的 JavaDoc 帮助文档,就像 JavaSE 标 ...

  3. Can't connect to X11 window server using 'localhost:0.0' 的解决

    Can't connect to X11 window server using 'localhost:0.0' 的解决 http://lufei-99999.blog.163.com/blog/st ...

  4. sring->list->del->string->int:解析左右编码器的,和#号

    #def test_sprintf(): import string ' str1="1234567890," print'str1 is',str1 list_raw=list( ...

  5. java list实现树形结构

    1.javabean import java.util.List; public class TreeNode { private String id; private String parentId ...

  6. delphi学习路线

     酷派(53376063) 11:04:19 1.语法基础PASCAL精要 先看个1-3遍,这是基础中的基础,只要没弄清楚看10遍都不多,当然最好结合着代码实例去看.(以后遇到哪儿不熟练继续反复看)2 ...

  7. Vue.js组件的通信之子组件向父组件的通信

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 2017年记录CS+CV

    2017年3月开学,始终感觉自己计算机基础薄弱,加上之前自己也开始对机器学习,深度学习有一些了解,始终感觉没有入门.自己开始规划系统学习计算机软件(CS)和计算机视觉(CV)的基础知识.@2017/9 ...

  9. 【Android小项目】找不同,改编自&quot;寻找房祖名&quot;的一款开源小应用。

    近期在微信朋友圈"寻找房祖名"和"万里寻刀"这类小游戏比較火.我试着写了一个android版本号的,里面全是一系列的形近字,实现原理非常easy:用一个Grid ...

  10. C#串口通讯教程 简化一切 只保留核心功能 这可能是最易于理解的一篇教程

    C#串口通讯教程 简化一切 只保留核心功能 这可能是最易于理解的一篇教程   串口的定义,请自行了解. C#操作串口通讯在.Net强大类库的支持下,只需要三个步骤: 1 创建 2 打开 3 发送/接受 ...