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

文章末有一些相应的测试数据供参考。

此题就是一个求最短路的问题,只不过现在的顶点名称变成了字符串而不是数字,我们用map做一个映射即可。

然后跑一个dijkstra算法就ok了,其中还用到了优先队列,每次取最小权值的边。

用时:1981 MS  还是挺快的

坑点

容器置空!!  map以及vector

此图是一个无向图!

可能有重边的情况!

首尾同名!

代码如下:

#include<iostream>
#include<vector>
#include<string>
#include<utility>
#include<map>
#include<queue>
#include<algorithm>
#include<functional>
using namespace std;
struct edge
{
int to, cost;
};
const int INF = 0x3f3f3f3f, MAX = ;
typedef pair<int, int> P; //first为最短距离, second是顶点编号 vector<edge> G[MAX];
int d[MAX]; //各个顶点的最短距离 void dijkstra(int s)
{
priority_queue<P, vector<P>, greater<P> >que;
fill(d, d + MAX, INF);
d[s] = ;
que.push(P(, s)); while (!que.empty())
{
P p = que.top();
que.pop();
int v = p.second;
if (d[v] < p.first)continue;
for (int i = ; i < G[v].size(); ++i)
{
edge e = G[v][i];
if (d[e.to] > d[v] + e.cost)
{
d[e.to] = d[v] + e.cost;
que.push(P(d[e.to], e.to));
}
}
}
} int main()
{
int N;
map<string, int> Map;
while (cin >> N&&N != -)
{
//!!记得置空!!
Map.clear();
for (int i = ; i < MAX; ++i)G[i].clear();
//少一个置空就过不了!!
string start, s1, s2;
cin >> start >> s2;
Map[start] = ;
Map[s2] = ;
int item = ;
while (N--)
{
edge e;
cin >> s1 >> s2 >> e.cost;
if (!Map[s1])Map[s1] = item++;
if (!Map[s2])Map[s2] = item++;
e.to = Map[s2];
G[Map[s1]].push_back(e);
e.to = Map[s1];
G[Map[s2]].push_back(e);
}
if (Map[start] == )
{
cout << << endl;
continue;
}
dijkstra();
if (d[] == INF)d[] = -;
cout << d[] << endl;
}
}

测试数据

xiasha westlake
xiasha station
xiasha ShoppingCenterofHangZhou
station westlake
ShoppingCenterofHangZhou supermarket
station supermarket
xiasha supermarket
supermarket xiasha
supermarket westlake xia xia
-

output


感谢您的阅读,祝您生活愉快~

HDU Today hdu 2112的更多相关文章

  1. HDU - 2222,HDU - 2896,HDU - 3065,ZOJ - 3430 AC自动机求文本串和模式串信息(模板题)

    最近正在学AC自动机,按照惯例需要刷一套kuangbin的AC自动机专题巩固 在网上看过很多模板,感觉kuangbin大神的模板最为简洁,于是就选择了用kuangbin大神的模板. AC自动机其实就是 ...

  2. HDU Today HDU杭电2112【Dijkstra || SPFA】

    http://acm.hdu.edu.cn/showproblem.php?pid=2112 Problem Description 经过锦囊相助,海东集团最终度过了危机,从此.HDU的发展就一直顺风 ...

  3. HDU 3062 && HDU 1824 && POJ 3678 && BZOJ 1997 2-SAT

    一条边<u,v>表示u选那么v一定被选. #include <iostream> #include <cstring> #include <cstdio> ...

  4. HDU 1069&&HDU 1087 (DP 最长序列之和)

    H - Super Jumping! Jumping! Jumping! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format: ...

  5. hdu 1430+hdu 3567(预处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1430 思路:由于只是8种颜色,所以标号就无所谓了,对起始状态重新修改标号为 12345678,对目标状 ...

  6. hdu 4055 && hdu 4489 动态规划

    hdu 4055: 一开始我想的递推方向想得很复杂,看了别人的博客后才醍醐灌顶: 参照他的思路和代码: #include<cstdio> #include<cstring> # ...

  7. Manacher 算法(hdu 3068 && hdu 3294)

    今天打算补前晚 BC 的第二题,发现要用到能在 O(n) 时间求最大回文子串长度的 Manacher 算法,第一次听,于是便去百度了下,看了大半天,总算能看懂了其思想,至于他给出的代码模板我没能完全看 ...

  8. HDU 1053 & HDU 2527 哈夫曼编码

    http://acm.hdu.edu.cn/showproblem.php?pid=1053 #include <iostream> #include <cstdio> #in ...

  9. hdu 2121 , hdu 4009 无定根最小树形图

    hdu 2121 题目:给出m条有向路,根不确定,求一棵最小的有向生成树. 分析:增加一个虚拟节点,连向n个节点,费用为inf(至少比sigma(cost_edge)大).以该虚拟节点为根求一遍最小树 ...

随机推荐

  1. 你知道吗?10个精妙的 Java 编码最佳实践

    这是一个比Josh Bloch的Effective Java规则更精妙的10条Java编码实践的列表.和Josh Bloch的列表容易学习并且关注日常情况相比,这个列表将包含涉及API/SPI设计中不 ...

  2. HDU 1251 统计难题 (裸的字典树)

    题目链接 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本 ...

  3. POJ 3164 Command Network ( 最小树形图 朱刘算法)

    题目链接 Description After a long lasting war on words, a war on arms finally breaks out between littlek ...

  4. 容斥原理&&莫比乌斯专题

    A题:A - Eddy's爱好   HDU - 2204 具体思路:如果是求n中,为平方数的有多少个,那么答案肯定是sqrt(n),同理,如果是三次根号的话,那么答案肯定是n的三分之一次方.然后继续按 ...

  5. 冲量:momentum

    参见:http://www.jianshu.com/p/58b3fe300ecb,这个博客里有冲量的python实现的代码和讲解 “冲量”这个概念源自于物理中的力学,表示力对时间的积累效应. 在普通的 ...

  6. C# 所生成项目的处理器架构“MSIL”与引用“Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86”的处理器架构“x86”不匹配。这种不匹配可能会导致运行时失败。

    这个问题一般都是Oracle.DataAccess的版本不兼容问题造成的. 解决办法: 1.把Oracle.DataAccess.dll文件拿到C盘或D盘的安装文件的地方进行搜索. 2.会出现在pro ...

  7. Ubuntu_安装Wiz笔记

    前言 安装完成了Linux,有了搜狗输入法,我们还需要笔记软件,本文主要介绍如何安装为知笔记 安装步骤 找到wiz官网:http://www.wiz.cn/ 获取Linux安装教程 安装QT 下载的Q ...

  8. python网络编程--线程使用threading

    一:线程使用 线程使用有两种方法,一种是直接使用,二是通过继承threading.Thread类使用 二:函数式使用 函数式:调用thread模块中的start_new_thread()函数来产生新线 ...

  9. CSS--布局模型,颜色值,长度值

    目录 布局模型 流动模型(Flow) 浮动模型 (Float) 层模型(Layer) 颜色值 长度值  一.布局模型 网页布局模型:个人理解,就是对html中各个元素进行一个排列.而排列的方法可以分为 ...

  10. IOS使用xcode编译代码

    一.安装xcode 在app store中搜索xcode然后点击安装即可. 二.创建第一个app 1.启动xcode,单击Lauchpad 2.单击xcode启动 3.单击“Create a new ...