Problem Description

虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^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
解题思路:用Dijkstra求最短时间。由题目中红色字体可以知道草儿去相邻城市所花费的时间是不计其中的,所以与之相邻的边都要初始化为0。因为a,b城市的起点编号有从1开始,所以我们将草儿家的编号设置为0,这样就不会有冲突;并且由于输入的城市编号无法直接从题目得知,因此需要取输入城市编号的最大值,这样问题求解变成求草儿家到各城市所花费的最短时间,最后的lowcost数组就是起点0到各点的最小时间,所以取其想要去的城市的最短时间输出即可。注意:处理输入时可能出现重边的情况,因为题目已经说a,b之间可能有多条路。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
const int MAXN=;
const int INF=0x3f3f3f3f;
bool vis[MAXN];
int T,S,D,Maxnum,lowcost[MAXN],cost[MAXN][MAXN],want[MAXN];
void Dijkstra(){
for(int i=;i<=Maxnum;i++)
lowcost[i]=cost[][i];
lowcost[]=;vis[]=true;
for(int i=;i<=Maxnum;++i){//遍历剩下的Maxnum个节点
int k=-;
for(int j=;j<=Maxnum;++j)
if(!vis[j] && (k==-||lowcost[k]>lowcost[j]))k=j;
if(k==-)break;//表明所有节点已经全部找到,直接退出
vis[k]=true;
for(int j=;j<=Maxnum;++j)
if(!vis[j])lowcost[j]=min(lowcost[j],lowcost[k]+cost[k][j]);
}
}
int main()
{
int x,y,z;
while(cin>>T>>S>>D){
Maxnum=;
memset(cost,0x3f,sizeof(cost));//初始化
for(int i=;i<=T;++i){
cin>>x>>y>>z;
Maxnum=max(max(Maxnum,x),y);//找出最大的城市编号
if(cost[x][y]>z)cost[x][y]=cost[y][x]=z;//可能有重边
}
for(int i=;i<=S;i++){//默认和草儿家相连的城市之间时间为0,因为实际花费时间是乘坐火车所用时间
cin>>x;
cost[][x]=cost[x][]=;
}
memset(vis,false,sizeof(vis));
for(int i=;i<=D;i++)cin>>want[i];
Dijkstra();
int minn=INF;
for(int i=;i<=D;i++)//想去某个城市的最短时间
minn=min(minn,lowcost[want[i]]);
cout<<minn<<endl;
}
return ;
}

题解报告:hdu 2066 一个人的旅行的更多相关文章

  1. hdu 2066 一个人的旅行

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

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

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

  3. hdu 2066 一个人的旅行 Dijkstra

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

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

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

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

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

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

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

  7. HDU 2066 一个人的旅行(单源最短路SPFA)

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

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

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

  9. hdu 2066 一个人的旅行 最短路径

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

随机推荐

  1. python基础面试题30问(附带答案)

    1.     闭包 定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个参数a, 内层函数依旧传入一个参数b, 内层函数使用a和b, 最后 ...

  2. graph.h

    #ifndef _GRAPH_#define _GRAPH_#include<stdio.h>#include<stdlib.h>#include<string.h> ...

  3. 洛谷 3178 [HAOI2015]树上操作

    [题解] 就是个树链剖分的模板题. #include<cstdio> #include<algorithm> #include<cstring> #define L ...

  4. Hashing - Hard Version

    Hashing - Hard Version Given a hash table of size N, we can define a hash function . Suppose that th ...

  5. 以位为单位存储标志-共用体-union

    一.程序的结构如下: typedef union _KEYST     {         struct         {             uint8 Key1_Flag :1;//表示第0 ...

  6. print pdf bug & DOCTYPE

    print pdf bug & DOCTYPE OK with <!DOCTYPE html> <!DOCTYPE html> <html lang=" ...

  7. [luoguP2915] [USACO08NOV]奶牛混合起来Mixed Up Cows(DP)

    传送门 f[i][S] 表示当前集合为 S,最后一个数为 i 的最优解 f[i][S] += f[j][S - i] (j, i ∈ S && j != i && ab ...

  8. H - Tickets

    Jesus, what a great movie! Thousands of people are rushing to the cinema. However, this is really a ...

  9. Redis3.0集群方案分析

    在Redis3.0集群出来之前,大家都对作者antirez寄予厚望,因为Redis从来没有让我们失望过.现在Redis3.0集群出来了,网上出了很多评论文章,都说他的功能多么强大,包括下面这张图是彻底 ...

  10. js二叉树,前序/中序/后序(最大最小值,排序)

    function Node(data,left,right) { this.left=left this.right=right this.data=data } function Btr() { t ...