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
开始用了Floyd的算法,无奈超时,因为一开始没有往单元最短路上想,以为是数组初始化上超时,后来看了别人的博客,才发现此题可以用Dijkstra来解,把草儿的家看做一个点,到其最近的车站的费用为0(真是巧妙的想法)。这样,这个题就完完全全变成了单元最短路的问题!
code:
#include<iostream>#include<queue>#include<cstdio>#include<cstring>#include <algorithm>using namespace std;

const int INF=0x3f3f3f3f;const int N=1005;int n;int mp[N][N];int dp[N],vis[N];

void Dijkstra()    //单源最短路{    int i,j;    int x,t;    memset(vis,0,sizeof(vis));    for (i=0;i<n;i++) dp[i]=mp[0][i];    vis[0]=1;    for (i=0;i<n;i++)    {        t=INF;        for (j=0;j<n;j++)            if (!vis[j]&&dp[j]<t)  x=j,t=dp[x];            if (t>=INF) break;        vis[x]=1;        for (j=0;j<n;j++)            if (!vis[j])            dp[j]=min(dp[j],dp[x]+mp[j][x]);    }}

int main(){

    int T,S,D;    while (cin>>T>>S>>D)    {        int i,j;        int u,v,w;        int s,t;        n=-1;         for(i=0;i<N;i++)            for(j=0;j<N;j++)                mp[i][j]=(i==j?0:INF);        memset(mp,INF,sizeof(mp));        for(i=0;i<T;i++)        {            scanf("%d%d%d",&u,&v,&w);            n=max(n,max(u,v));            if(mp[u][v]>w)                mp[u][v]=mp[v][u]=w;        }        n++;        for (i=0;i<S;i++)        {         scanf("%d",&s);         mp[0][s]=mp[s][0]=0;        }        Dijkstra();        int ans=INF;        for (i=0;i<D;i++)   //找出最小的费用即可        {          scanf("%d",&t);          ans=min(dp[t],ans);        }            printf("%d\n",ans);    }    return 0;}

HDU2066:一个人的旅行相关推荐

  1. HDU2066 一个人的旅行【最短路径+Floyd算法】

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

  2. HDU-2066 一个人的旅行

    HDU-2066 一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)   P ...

  3. hdu2066一个人的旅行(disjkstra)

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

  4. HDU2066一个人的旅行(SPFA)

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

  5. hdu2066 一个人的旅行 floyd

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

  6. HDU2066一个人的旅行---(多起点多终点最短路径)

    http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memo ...

  7. 【算法】最短路径--Hdu2066 一个人的旅行

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

  8. HDU-2066 一个人的旅行(dijkstra)

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

  9. HDU2066 一个人的旅行

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

  10. hdu2066——一个人的旅行

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

最新文章

  1. 怎么样清除bitcoin-qt的交易记录
  2. Exchange与ADFS单点登录 PART 5:添加ADFS信赖方信任
  3. 遇到这样的程序员,你怎么办?
  4. 前后数据交互(ajax) -- 初始化页面表格
  5. PTA22、最小乘积(基本型) (10 分)
  6. mysql私房菜_老男孩MySQL私房菜深入浅出精品视频第7章备份与恢复基础实践视频课程...
  7. 反思 大班 快乐的机器人_幼儿园大班健康教案《有趣的椅子》含反思
  8. 什么软件可以测试小米四进水没有声音,小米5手机进水不用怕!牢记4个步骤救活手机...
  9. Php依赖其他模块,3. 强制模块依赖
  10. .netcore 2.0 mysql_MySQL数据库之.Net Core 2.0 使用EF连接MySQL数据库
  11. 机顶盒天线接头怎么接_户户通天线怎么安装图解
  12. android手机给iphone越狱,在越狱的iPhone上安装Android 2.2教程
  13. 【转】一文带你了解800万像素车载摄像头
  14. YOLOV3预选框验证
  15. 一部分使用CNES后处理BIA产品的PPP-AR结果
  16. 很牛的几篇圈内爆料——影视圈
  17. Objective-C中的instancetype和id区别
  18. poj3046 Ant Counting
  19. 通过炒股实现财务自由的人,都做对了什么?
  20. python去重、根据某列统计另一列频数

热门文章

  1. T-1-java语言基础
  2. 软件结构B/S和C/S
  3. tmux颜色高亮跟vim不一致的情况
  4. 插件开发-UI插件开发
  5. Adroid学习之 从源码角度分析-禁止使用回退按钮方案
  6. 【second】Flatten Binary Tree to Linked List
  7. .net类库学习(一)System.object
  8. IE8给你选择的理由
  9. jsonobject修改key的值_JSON字符串操作移除空串更改key/value的介绍
  10. c语言鼠标移动响应,CSS鼠标响应事件经过、移动、点击示例介绍