<题目链接>

虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。

Input

输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个; 
接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路) 
接着的第T+1行有S个数,表示和草儿家相连的城市; 
接着的第T+2行有D个数,表示草儿想去地方。

Output

输出草儿能去某个喜欢的城市的最短时间。

Sample Input

6 2 3
1 3 5
1 4 7
2 8 12
3 8 4
4 9 12
9 10 2
1 2
8 9 10

Sample Output

9
解题分析:
解决此题有两种思路。
第一种:将草儿的家看做标号为0的点,然后这个点到与它相邻城市的距离为0,然后做一次dijsktra,就可得到标号为0的点到所有点的最短距离;
第二种:将于草儿家相邻的所有城市看成不同的起点,然后对这些所有的起点都跑一遍dijkstra。 下面的是第一种的代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std; #define INF 0x3f3f3f3f
const int maxn = + ;
int n, m, d;
int map[maxn + ][maxn + ];
int vis[maxn], maxnode;
int goal[maxn + ], node[maxn + ];
int dis[maxn + ]; void dij()
{
memset(vis, , sizeof(vis));
memset(dis, INF, sizeof(dis));
dis[] = ;
int cur = ; //初始起点为草儿自己家
for (int i = ; i <= maxnode; i++) {
if (node[i]) {
vis[cur] = ;
for (int j = ; j <= maxnode; j++) {
if (node[j] && vis[j] == )
dis[j] = min(dis[j], map[cur][j] + dis[cur]);
} int maxn = INF, x = ;
for (int j = ; j <= maxnode; j++)
{
if (node[j] && dis[j] <= maxn && !vis[j])
{
maxn = dis[j];
x = j;
}
} cur = x;
}
} int dist = INF;
for (int i = ; i <= d; i++)
{
if (dist>dis[goal[i]])
dist = dis[goal[i]];
}
printf("%d\n", dist);
} int main()
{
while (scanf("%d%d%d", &n, &m, &d) != EOF)
{
memset(node, , sizeof(node)); //node数组记录下本题中出现过的点
maxnode = -INF; //maxnode记录下输入中,标号最大的点,为循环找到边界
memset(map, INF, sizeof(map));
for (int i = ; i <= n; i++)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (c<map[a][b]) { //如果两个点之间有多条路,选择最短的那一条
map[a][b] = map[b][a] = c;
if (a>maxnode)maxnode = a;
if (b>maxnode)maxnode = b;
}
node[a] = , node[b] = ;
}
for (int i = ; i <= m; i++) {
int cal; scanf("%d", &cal);
node[cal] = ;
map[][cal] = map[cal][] = ; //草儿家到与她家相邻城市的距离置为0
} for (int i = ; i <= d; i++) {
scanf("%d", &goal[i]); //目标城市
node[goal[i]] = ;
}
dij();
}
return ;
}

2018-08-13

HDU-2066-一个人的旅行 【Dijkstra】的更多相关文章

  1. hdu 2066 一个人的旅行 Dijkstra

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 题意分析:以草儿家为原点,给出城市间相互抵达的时间,给出草儿想去的城市,求最短时间.典型的单源最 ...

  2. HDU 2066 一个人的旅行 (Dijkstra算法)

    一个人的旅行 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submis ...

  3. hdu 2066 一个人的旅行

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷 ...

  4. HDU 2066 一个人的旅行(dijkstra水题+判重边)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 题目大意:输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有 ...

  5. hdu 2066 一个人的旅行(dijkstra)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. HDU 2066 一个人的旅行【Dijkstra 】

    题意:给出s个起点,d个终点,问从这些起点到达终点的最短距离 因为有多个起点,所以把这多个起点的值设为0 哎= =改了好久的说= = 是因为在代码里面的t,不知道为什么调用dijkstra()函数之后 ...

  7. hdu 2066 一个人的旅行 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 题目意思:给出T条路,和草儿家相邻的城市编号,以及草儿想去的地方的编号.问从草儿家到达草儿想去的 ...

  8. hdu - 2066 一个人的旅行(基础最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=2066 把与草儿相连的城市最短距离置为0,然后进行dijkstra,在t个城市里找出距离最近的一个即可. #inc ...

  9. HDU 2066 一个人的旅行 - from lanshui_Yang

    Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...

  10. hdu 2066 一个人的旅行(最短路问题)

    最短路································· 类似的问题还有好多不会!慢慢学吧!!!!. 进步,哪怕每天一点也行! (恋爱不是小事,确实小事的积累!(听着酷狗音乐台说的,很 ...

随机推荐

  1. php ldap

    参考链接: http://blog.csdn.net/guoyuqi0554/article/details/11015403 http://blog.csdn.net/qk1992919/artic ...

  2. android logger 日志工具

    https://github.com/orhanobut/logger 基础使用:https://blog.csdn.net/github_33304260/article/details/54799 ...

  3. 【ANT】ant使用

    官网:https://ant.apache.org/,task介绍:https://ant.apache.org/manual/index.html 0.介绍: Ant的构建文件当开始一个新的项目时, ...

  4. WinEdt 和 Sumatra 双向关联设置

    (1)配置PDF Viewer,在菜单栏选Options -> Execution Modes ->PDF Viewer ->点击右侧的"Browse"按钮,在弹 ...

  5. 【工具测试】Acunetix 11-登录后扫描的功能

    1.概要 在测试的过程中,会给一些只有登录口的测试站点,只有登录后才能访问更多的页面. Acunetix 11的登录后扫描功能摸索了老半天,原来这么神奇.学习了! 2.操作 登录之后 - [Add T ...

  6. 【逆向工具】IDA使用3-全局变量、数组、结构体

    全局变量 测试代码 全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建.全局变量是可以被本程序所有对象或函数引用.下面这段代码中将int.float.char变量定义在main函数之外. / ...

  7. 为你的VPS进行一些安全设置吧

    安全是一个VPS最基本的必备条件,若您的VPS三天两头被人攻破,那么对于网站来说也没什么意义了,所以,在创建了Web服务器之后,您首先要做的事情就是将您的VPS加固,至少让普通黑客没有办法能够攻破您的 ...

  8. Expm 9_2 有向图的强连通分量问题

      [问题描述] 给定一个有向图,设计一个算法,求解并输出该图的各个强连通分量. package org.xiu68.exp.exp9; import java.util.ArrayList; imp ...

  9. 如何把JS对象转成数组

    1. 前言 首先,当JS对象是键值对的情况时(Json对象),因为数组时以数字为索引的,所以只能把JS对象中的Key或者Value组成数组使用. 2. 样例如下: var obj={"one ...

  10. 使用ueditor的时候,style样式传递到后台时被过滤没了

    在项目中,使用ueditor的时候,style样式传递到后台时被过滤没了 转:https://www.cnblogs.com/theroad/p/5761743.html 经过chrome的一番调试后 ...