最短路径:HDU2006-一个人的旅行(多个起点,多个终点)
题目:
一个人的旅行
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-一个人的旅行(多个起点,多个终点)的更多相关文章
- HDU2066一个人的旅行---(多起点多终点最短路径)
http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memo ...
- 奇妙的旅行[XDU1012]
Problem 1012 - 奇妙的旅行 Time Limit: 1000MS Memory Limit: 65536KB Difficulty: Total Submit: 396 Acc ...
- AGV
AGV AGV是(Automated Guided Vehicle)的缩写,意即“自动导引运输车”,是指装备有电磁或光学等自动导引装置,它能够沿规定的导引路径行驶,具有安全保护以及各种移载功能的运输车 ...
- 人生效率手册:如何卓有成效地过好每一天--By张萌姐姐--读书笔记
读书笔记:<人生效率手册>:如何卓有成效地过好每一天--By张萌姐姐... 整本书看完的感受: 这本书主要讲的是生活中我们需要给自己一个目标,然后通过自己的努力去实现这个目标,书中说的很多 ...
- <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 ...
- COGS 2. 旅行计划
2. 旅行计划 ★☆ 输入文件:djs.in 输出文件:djs.out 简单对比时间限制:3 s 内存限制:128 MB 过暑假了,阿杜准备出行旅游,他已经查到了某些城市的两两之间的距 ...
- hdu6290奢侈的旅行
高玩小Q不仅喜欢玩寻宝游戏,还喜欢一款升级养成类游戏.在这个游戏的世界地图中一共有n个城镇,编号依次为1到n. 这些城镇之间有m条单向道路,第i 条单项道路包含四个参数ui,vi,ai,bi,表示一条 ...
- cogs 2. 旅行计划 dijkstra+打印路径小技巧
2. 旅行计划 ★★ 输入文件:djs.in 输出文件:djs.out 简单对比时间限制:3 s 内存限制:128 MB [题目描述] 过暑假了,阿杜准备出行旅游,他已经查到了某些城市 ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
随机推荐
- jdbc操作数据库的步骤
package com.jckb; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepare ...
- c#读取word内容,c#提取word内容
Post by 54admin, 2009-5-8, Views:575 1: 对项目添加引用,Microsoft Word 11.0 Object Library 2: 在程序中添加 using W ...
- HTTP原理及状态码汇总
什么是HTTP: HTTP(HyperText Transfer Protocol超文本传输协议)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准,为了提供一种发布和接收HTM ...
- Vue系列(1):单页面应用程序
前言:关于页面上的知识点,如有侵权,请看 这里 . 关键词:SPA.单个 HTML 文件.全靠 JS 操作.Virtual DOM.hash/history api 路由跳转.ajax 响应.按需加载 ...
- Eucalyptus-instance启动后查看运行状态
1.前言 在eucalyptus中通过虚拟机模板,创建并启动一个虚拟机,这个时候虚拟机启动正常,但是外部一直无法访问也ping不通,正对这种情况我们如何检查排除问题呢? 两种检查问题的方法: 1).在 ...
- iOS编程规范(整理)
一.文档结构管理 1.建立Libraries文件夹,所有第三方库放入其中. 2.建立Utilities文件夹,自已封装的类放入其中. 3.建立Constants.h头文件,所有的常量定义于其中.Con ...
- Spring Boot 的配置文件application.properties
Spring Boot 中的application.properties 是一个全局的配置文件,放在src/main/resources 目录下或者类路径的/config下. 作为全局配置文件的app ...
- [Unity3D] 如何识别屏幕边缘
出现的问题 Unity3D中长度单位是米 使用Screen.resolutions获取的屏幕信息单位是像素 也就是说,即使获取了屏幕相关信息及参数,也无法把信息转换成可在editor中使用的信息.当时 ...
- Linux、命令ps 各字段意思
参数: -A :所有的进程均显示出来,与 -e 具有同样的效用: -a : 显示现行终端机下的所有进程,包括其他用户的进程: -u :以用户为主的进程状态 : x :通常与 a 这个参数一起使用,可列 ...
- redis在Windows下以后台服务一键搭建集群(多机器)
redis在Windows下以后台服务一键搭建集群(多机器) 一.概述 此教程介绍如何在windows系统中多台机器之间布置redis集群,同时要以后台服务的模式运行.布置以脚本的形式,一键完成.多台 ...