HDU
来源:互联网 发布:360浏览器注入js 编辑:程序博客网 时间:2024/06/03 20:21
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066点击打开链接
一个人的旅行
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 40053 Accepted Submission(s): 13602
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个数,表示草儿想去地方。
接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路)
接着的第T+1行有S个数,表示和草儿家相连的城市;
接着的第T+2行有D个数,表示草儿想去地方。
Output
输出草儿能去某个喜欢的城市的最短时间。
Sample Input
6 2 31 3 51 4 72 8 123 8 44 9 129 10 21 28 9 10
Sample Output
9
Author
Grass
将相邻城镇话费看作0 一次dijkstra
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<queue>#include<map>#include<math.h>#include<limits.h>#include<vector>#include <set>using namespace std;int t,s,d;struct xjy{ int num; int dis; bool operator < (const xjy &r) const { return dis>r.dis; }};vector<int > want;int maxx;xjy dis[1111];xjy mmap[1111][1111];int book[1111];priority_queue<xjy>q;void dijkstra(int begin){ xjy mid; dis[begin].dis=0; dis[begin].num=begin; mid=dis[begin]; q.push(mid); while(!q.empty()) { mid=q.top(); q.pop(); for(int i=0;i<=maxx;i++) { if(!book[i]&&dis[i].dis>=mmap[mid.num][i].dis+dis[mid.num].dis&&mmap[mid.num][i].dis<INT_MAX) { if(dis[i].dis==mmap[mid.num][i].dis+dis[mid.num].dis) continue; dis[i].dis=mmap[mid.num][i].dis+dis[mid.num].dis; dis[i].num=i; q.push(dis[i]); } } }}int main(){ while(~scanf("%d%d%d",&t,&s,&d)) { maxx=0; want.clear(); for(int i=0;i<=1005;i++) for(int j=0;j<=1005;j++) { if(i==j) mmap[i][j].dis=0; else mmap[i][j].dis=INT_MAX; } for(int i=0;i<=1005;i++) { dis[i].dis=INT_MAX; book[i]=0; } for(int i=1;i<=t;i++) { int mid1,mid2,mid3; scanf("%d%d%d",&mid1,&mid2,&mid3); maxx=max(maxx,mid1); maxx=max(maxx,mid1); if(mmap[mid1][mid2].dis>mid3) { mmap[mid1][mid2].dis=mid3; mmap[mid2][mid1].dis=mid3; } } for(int i=1;i<=s;i++) { int mid; scanf("%d",&mid); maxx=max(maxx,mid); if(mmap[0][mid].dis>0) { mmap[0][mid].dis=0; mmap[mid][0].dis=0; } } for(int i=1;i<=d;i++) { int mid; scanf("%d",&mid); want.push_back(mid); maxx=max(maxx,mid); } dijkstra(0); int ans=INT_MAX; for(int i=0;i<want.size();i++) ans=min(ans,dis[want[i]].dis); cout << ans << endl; }}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 编程语言基础
- POJ 1637 Sightseeing tour (混合图欧拉路判定)(可以转化为最大流)
- 设计模版
- [ NYOJ
- Android基础_Xml的Pull解析/安卓中的数据库以及实例化数据库的第三方框架Litepal(五)
- HDU
- 关于C语言中结构体对齐问题
- struts2之拦截器
- 1416: Kick Ass Biu [几何]
- [深度学习之CNN] 之参考博客链接汇总(更新中)
- 学习笔记 二叉搜索树(BST)
- Android应用开发—TextView的动态创建
- 网桥,Bond与Team
- ros&c++遇到的坑(vector 引起segmentation fault )