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. python3 的 zip

    准备放弃生命中这4个小时,然后翻开了python,人生苦短,音乐和python才味甘 1. zip  可以看到zip两个列表,返回一个元组的列表,但是它是个可迭代的对象,得用list才能调用显示: 2 ...

  2. 牛客网NOIP赛前集训营 提高组 第5场 T2 旅游

    [题解] 我们可以发现不在最小生成树上的边一定不能多次经过,因为一条不在最小生成树上的边(u,v)的边权比最小生成树上(u,v)之间的路径更长,选择不在最小生成树上的边一定不划算. 我们还需要确定最小 ...

  3. HDU 5217 Brackets

    [题意概述] 给出一个有左括号和右括号的序列,左边的左括号和右边的右括号可以合并.现在要求你维护这个序列,支持两种操作: 1,翻转某个位置的括号: 2,查询区间[L,R]合并后第k个括号在原序列中的位 ...

  4. saltstack(五) saltstack的state状态管理

    一,YAML语法 首先先了解一下YAML,默认的SLS文件的renderer是YAML renderer.YAML是一个有很多强大特性的标记性语言.Salt使用了一个YAML的小型子集,映射非常常用的 ...

  5. better-scroll & scroll

    scroll better-scroll https://github.com/ustbhuangyi/better-scroll/blob/master/README.md#getting-star ...

  6. MyBatis与Spring MVC结合时,使用DAO注入出现:Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

    错误源自使用了这个例子:http://www.yihaomen.com/article/java/336.htm,如果运行时会出现如下错误: Invocation of init method fai ...

  7. heap实现

    //STL提供的是Max heap,使用vector作为底部容器 //push_heap算法:首先将元素放到堆所对应的数组的末端,然后从该节点开始向上调整, //若当前结点键值比父结点大,则兑换位置, ...

  8. docker国内镜像拉取和镜像加速registry-mirrors配置修改

    docker国内镜像拉取和镜像加速registry-mirrors配置修改 学习了:http://blog.csdn.net/u014231523/article/details/61197945 站 ...

  9. Android Studio 开发利器【经常使用插件】

    1.ADB Idea ADB操作快捷菜单.高速清除数据,重新启动应用,卸载应用等 快捷键: Windows: Ctrl+Alt+Shift+A Mac OSX: Ctrl+Shift+A 当然,你能够 ...

  10. MyEclipse 9.0 正式版公布新闻 下载

    MyEclipse 9.0 正式版公布 新闻 ============================================================================ ...