HDU 2066 一个人的旅行
2016-05-09 18:57
176 查看
一个人的旅行
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 29636 Accepted Submission(s): 10179
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
题解:为了节省时间,选择花费最少的时间的地方去旅行,从相邻的地方出发,可以从家到相邻的地方花费时间设为0
然后Dijistra找到从家到其他地方的最短时间,然后找出想去的地方的最短时间。
代码:
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 29636 Accepted Submission(s): 10179
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
题解:为了节省时间,选择花费最少的时间的地方去旅行,从相邻的地方出发,可以从家到相邻的地方花费时间设为0
然后Dijistra找到从家到其他地方的最短时间,然后找出想去的地方的最短时间。
代码:
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; const int maxx=1005; const int inf=0x3f3f3f3f; int T,S,D,n; int map[maxx][maxx];//存放关系 int s[maxx];//存放相邻的点 int e[maxx];//存放想去的地方 int vis[maxx];//是否访问 int ans[maxx];//存放最短距离 //Dijstra核心算法 inline void Dijstra() { int u,minn; memset(vis,0,sizeof(vis)); for(int i=0; i<=n; i++) ans[i]=map[0][i]; vis[0]=1; for(int i=1; i<=n; i++) { minn=inf; for(int j=1; j<=n; j++) { if(!vis[j]&&ans[j]<minn) { minn=ans[j]; u=j; } } vis[u]=1; for(int v=1; v<=n; v++) { if(map[u][v]<inf) { if(!vis[v]&&ans[v]>ans[u]+map[u][v]) ans[v]=ans[u]+map[u][v]; } } } } int main() { while(~scanf("%d%d%d",&T,&S,&D)) { n=0; for(int i=0; i<=1005; i++) { for(int j=0; j<=1005; j++) { if(i==j) map[i][j]=0; else map[i][j]=inf; } } while(T--) { int x,y ,z; scanf("%d%d%d",&x,&y,&z); n=max(max(n,x),y);///找到最大的那个点 if(map[x][y]>z) { map[x][y]=map[y][x]=z; } } for(int i=0; i<S; i++) { scanf("%d",&s[i]); map[0][s[i]]=map[s[i]][0]=0;///家到相邻点的距离为0 } for(int i=0; i<D; i++) { scanf("%d",&e[i]); } Dijstra(); int minn=inf; for(int i=0; i<D; i++) { minn=min(minn,ans[e[i]]);///找到想去的花费的最短时间 } printf("%d\n",minn); } return 0; }
相关文章推荐
- 分割问题
- 4.Spark Streaming事务处理
- 【最新】最流行的java后台框架 springmvc mybaits 集代码生成器 SSM SSH
- js作用域
- C++ Primer 学习笔记_81_模板与泛型编程 -类模板成员[续一]
- 安卓应用性能检测工具列表
- jdom方式修改xml节点值,并返回xml(String)
- node crypto sha192 翻译为java
- MySQL 设置字符集为utf-8
- os.environ()
- C++ Primer 学习笔记_80_模板与泛型编程 -类模板成员
- unix编程(七)线程控制
- C++ Primer 学习笔记_79_模板与泛型编程 -模板编译模型
- C++ Primer 学习笔记_78_模板与泛型编程 -实例化[续]
- Mysql备份
- View(视图)———日期时间
- C++ Primer 学习笔记_77_模板与泛型编程 -实例化
- PHP文件处理类 SplFileObject 和 SplFileInfo
- (JNI)C/C++ 访问 Java 实例变量和静态变量
- C++ Primer 学习笔记_76_模板与泛型编程 -模板定义[续]