题目: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. Sql Server 逻辑文件 '' 不是数据库 '' 的一部分。请使用 RESTORE FILELISTONLY 来列出逻辑文件名。

    当使用语句还原数据库时,报如下错误: 消息 3234,级别 16,状态 2,第 29 行逻辑文件 'LenborMealOrder_Base_2017' 不是数据库 'Members_01' 的一部分 ...

  2. c++细节--section1

    1.register声明的变量为寄存器变量,因此没有地址,不能对它取地址操作. 2.[用错sizeof]当数组作为函数参数传递时,数组会退化为同类型的指针. 3.每个成员在成员初始化列表中只能出现一次 ...

  3. 【Python项目】爬取新浪微博个人用户信息页

    微博用户信息爬虫 项目链接:https://github.com/RealIvyWong/WeiboCrawler/tree/master/WeiboUserInfoCrawler 1 实现功能 这个 ...

  4. 如何调整Linux内核启动中的驱动初始化顺序-驱动加载优先级

    Linux内核为不同驱动的加载顺序对应不同的优先级,定义了一些宏: include\linux\init.h #define pure_initcall(fn) __define_initcall(& ...

  5. 服务发现 consul cluster 的搭建

    consul cluster setup 介绍和指南: consul用于服务发现.当底层服务发生变化时,能及时更新正确的mysql服务IP. 并提供给业务查询.但需要自行编写脚本,监测数据库状态和切断 ...

  6. JSONArray().fromObject(); 出现org.apache.catalina.core.StandardWrapperValve invoke错误的解决办法

    servlet: public void service(HttpServletRequest request, HttpServletResponse response) throws Servle ...

  7. cocos2dx中调用TinyXml读取xml配置文件 || cocos2d-x 中跨平台tinyxml读取xml文件方式

    TiXmlDocument *doc = newTiXmlDocument; #if (CC_TARGET_PLATFORM ==CC_PLATFORM_ANDROID) //Android平台tin ...

  8. Flask:文件配置方式实践及其中的各种问题记录

    Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2, 提示: 1.请查看本文后面的“18-07-17  11:18重大纠正” ! 2.flask run命令运行时传入参数 ...

  9. python面向对象(二)之封装

    封装定义: 在程序设计中,封装(Encapsulation)是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其含义是其他程序无法调用. 即"封装"就是将抽象得到的数 ...

  10. Vue 实现countDown倒计时

    项目中要用到倒计时,用Vue 实现了一个 <template> <transition name="bkcd"> <div class="b ...