题目:

一个人的旅行

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 37642    Accepted Submission(s): 12815

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

 

Author

Grass

 

Source

RPG专场练习赛

 

Recommend

lcy   |   We have carefully selected several similar problems for you:  1874 2112 1217 1548 1142

解题心得:

1、之前做的最短路径使用Dijkstra算法一直都是算的一个起点,所以在一开始有一点懵逼,其实在使用Dijkstra算法之接将所有的起点全部初始化为0就可以了,它会自动寻找多个起点到终点的最短路径,注意这时d[i],记录的是从多个起点到达I点的最短路径,如果需要记录是哪个起点到达的最短路径还需要记录。

2、之后使用了一下Floyd的算法,因为Floyd算法可以直接记录所有的maps[i][j],即从I点到j点的最短路径,但是我们算一下时间复杂度,1000*1000*1000=1000000000,直接就炸了,所以使用Floyd最好使用数据量比较小的。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int maps[maxn][maxn];
const int INF = 0x3f3f3f3f;
int Start[maxn],End[maxn];
int dp[maxn];
bool vis[maxn];
int N; void Dis()
{
int v;
for(int i=0;i<=N;i++)
dp[i] = maps[0][i];
while(1)
{
v = -1;
for(int i=1;i<=N;i++)
if((v == -1 || dp[i] < dp[v]) && !vis[i])
v = i;
vis[v] = 1;
if(v == -1)
break;
for(int i=1;i<=N;i++)
dp[i] = min(dp[i],dp[v]+maps[v][i]);
}
}
int main()
{
int t,s,d;
while(scanf("%d%d%d",&t,&s,&d)!=EOF)
{
N = 0;
for(int i=0;i<=1000;i++)
{
for(int j=0;j<=1000;j++)
maps[i][j] = INF;
maps[i][i] = 0;
}
memset(vis,0,sizeof(vis));
while(t--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a > N)//N用来记录最远的一个地点,即记录上限
N = a;
if(b > N)
N = b;
if(maps[a][b] > c)
maps[a][b] = maps[b][a] = c;//两个地点之间所需要的时间,好像并没有限制方向
}
for(int i=0;i<s;i++)
{
scanf("%d",&Start[i]);
maps[0][Start[i]] = maps[Start[i]][0] = 0;
}
for(int i=0;i<d;i++)
scanf("%d",&End[i]); Dis();
int Min = 0x7f7f7f7f;
for(int i=0;i<d;i++)
Min = min(Min,dp[End[i]]);//直接比较得出最小的路径
printf("%d\n",Min);
}
return 0;
}

最短路径:HDU2006-一个人的旅行(多个起点,多个终点)的更多相关文章

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

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

  2. 奇妙的旅行[XDU1012]

    Problem 1012 - 奇妙的旅行 Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty: Total Submit: 396  Acc ...

  3. AGV

    AGV AGV是(Automated Guided Vehicle)的缩写,意即“自动导引运输车”,是指装备有电磁或光学等自动导引装置,它能够沿规定的导引路径行驶,具有安全保护以及各种移载功能的运输车 ...

  4. 人生效率手册:如何卓有成效地过好每一天--By张萌姐姐--读书笔记

    读书笔记:<人生效率手册>:如何卓有成效地过好每一天--By张萌姐姐... 整本书看完的感受: 这本书主要讲的是生活中我们需要给自己一个目标,然后通过自己的努力去实现这个目标,书中说的很多 ...

  5. <Sicily>Catch the thief

    一.题目描述 A thief has robbed a bank in city 1 and he wants to go to city N. The police know that the th ...

  6. COGS 2. 旅行计划

    2. 旅行计划 ★☆   输入文件:djs.in   输出文件:djs.out   简单对比时间限制:3 s   内存限制:128 MB 过暑假了,阿杜准备出行旅游,他已经查到了某些城市的两两之间的距 ...

  7. hdu6290奢侈的旅行

    高玩小Q不仅喜欢玩寻宝游戏,还喜欢一款升级养成类游戏.在这个游戏的世界地图中一共有n个城镇,编号依次为1到n. 这些城镇之间有m条单向道路,第i 条单项道路包含四个参数ui,vi,ai,bi,表示一条 ...

  8. cogs 2. 旅行计划 dijkstra+打印路径小技巧

    2. 旅行计划 ★★   输入文件:djs.in   输出文件:djs.out   简单对比时间限制:3 s   内存限制:128 MB [题目描述] 过暑假了,阿杜准备出行旅游,他已经查到了某些城市 ...

  9. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

随机推荐

  1. 引用 Session详解 作者:郎云鹏

    本文转载自leeldy<Session详解 作者:郎云鹏>   引用 leeldy 的 Session详解 作者:郎云鹏 目录: 一.术语session 二.HTTP协议与状态保持 三.理 ...

  2. jQuery动态添加元素,并提交json格式数据到后台

    参考:https://www.cnblogs.com/shj-com/p/7878727.html 下载 下载该插件的地址是:http://www.bootcdn.cn/jquery.serializ ...

  3. <script>, <script async>, <script defer> 三种标签的区别

    <script>, <script async>, <script defer> 三种标签的区别 <script>标签 阻塞html parsing 脚 ...

  4. 构建第一个Spring Boot2.0应用之集成dubbo上---环境搭建(九)

    一.环境: Windows: IDE:IntelliJ IDEA 2017.1.1 JDK:1.8.0_161 Maven:3.3.9 springboot:2.0.2.RELEASE Linux(C ...

  5. Cocos2d-x v3.1 安装图文教程(二)

       Cocos2d-x v3.1 安装图文教程(二) 如果我们需要在Android平台上运行就必须安装android的SDK,如果我们只想在window上运行就只需要安装Cocos2d-x就行了.当 ...

  6. Linux、命令ps 各字段意思

    参数: -A :所有的进程均显示出来,与 -e 具有同样的效用: -a : 显示现行终端机下的所有进程,包括其他用户的进程: -u :以用户为主的进程状态 : x :通常与 a 这个参数一起使用,可列 ...

  7. 解决 Unable to convert MySQL date/time value to System.DateTime

    C#读取MySql时,如果存在字段类型为date/datetime时的可能会出现以下问题“Unable to convert MySQL date/time value to System.DateT ...

  8. java模式

    模式(Pattern) 模式(Pattern)的概念最早由建筑大师Christopher Alexander于二十世纪七十年代提出,应用于建筑领域,八十年代中期由Ward Cunningham和Ken ...

  9. python_66_生成器2

    import time def consumer(name): print('%s准备吃包子 '%name) while True: baozi=yield print('包子[%s]来了,被[%s] ...

  10. SQLAlchemy简介

    一.SQLAlchemy简介 SQLAlchemy是Python SQL工具包和对象关系映射器,是python中最著名的ORM(Object Relationship Mapping)框架,它简化了应 ...