【杭电oj】2066 - 一个人的旅行(迪杰斯塔拉,优先队列优化)

来源:互联网 发布:焦虑思维 知乎 编辑:程序博客网 时间:2024/06/16 12:17

点击打开题目

一个人的旅行

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 30189    Accepted Submission(s): 10376


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 31 3 51 4 72 8 123 8 44 9 129 10 21 28 9 10
 

Sample Output
9
 

Author
Grass
 

Source
RPG专场练习赛



又犯二了,这次记得了重复路径,if 后面加了个分号,检查了一小时。以后要注意这个问题啊!


代码如下:

#include <cstdio>#include <queue>#include <algorithm>#define MAX 1000using namespace std;struct node{int now,dis;bool friend operator < (node a, node b){return a.dis > b.dis;}}t,ne;int d[MAX+22];int map[MAX+11][MAX+11];bool used[MAX+11];int maxx;priority_queue<node> q;void init(){while (!q.empty())q.pop();for (int i = 0 ; i <= MAX ; i++){used[i] = false;d[i] = 999999;for (int j = i ; j <= MAX ; j++)map[i][j] = map[j][i] = 999999;}}void Dijkstra(){d[0] = 0;used[0] = true;for (int i = 1 ; i <= maxx ; i++){if (map[0][i] == 0){t.now = i;t.dis = 0;q.push(t);d[i] = 0;}}while (!q.empty()){t = q.top();q.pop();if (used[t.now])continue;used[t.now] = true;for (int i = 1 ; i <= maxx ; i++){if ((map[i][t.now] != 999999) && d[i] > (d[t.now] + map[i][t.now])){ne.now = i;ne.dis = d[t.now] + map[i][t.now];q.push(ne);d[i] = d[t.now] + map[i][t.now];}}}}int main(){int T,S,D;int ans;while (~scanf ("%d %d %d",&T,&S,&D)){init();maxx = 0;while (T--){int x,y,z;scanf ("%d %d %d",&x,&y,&z);if (map[x][y] > z)//判断重边 map[x][y] = map[y][x] = z;maxx = max (maxx , x);maxx = max (maxx , y);}while (S--){int x;scanf ("%d",&x);map[0][x] = map[x][0] = 0;}Dijkstra();ans = 999999;while (D--){int x;scanf ("%d",&x);ans = min (ans , d[x]);}printf ("%d\n",ans);}return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 58热敏小票打印机口松了怎么办 王鹏的眼睛今天起疙瘩了怎么办 背包带子老从肩膀滑下来怎么办 绝地求生用手机流量更新不成怎么办 手机拍的视频在电脑上放不了怎么办 炉石传说手机点登陆游戏闪退怎么办 车到信号屏蔽区一键启动不了怎么办 王者荣耀战队活跃度满了怎么办 win10你的账户已被停用怎么办 电脑一键还原后一直黑屏怎么办? 被打了狂犬疫苗的狗咬伤怎么办 美版苹果7系统坏了怎么办 韩服的球球大作战网络不稳定怎么办 球球大作战号删了找不回来怎么办 队友传足球球的时候接不到怎么办 魅族手机中病毒锁机了怎么办? vbs打开是和文本文档一样怎么办 把电脑注册表删了电脑动不了怎么办 注册表删一项后电脑启动不了怎么办 解压过的过的软件安装包损坏怎么办 手机中病毒自动发短信扣费怎么办 苹果手机中的高德地图打不开怎么办 大晚上挂了别人的车怎么办 手机不兼容高版本微信怎么办 绝地求生右下角小地图变大了怎么办 杯孕当月做了C丁怎么办 玩全军出击手机发烫就出现卡怎么办 不小心买了彩虹六号肝帝版本怎么办 微信游戏刺激战场电脑卡怎么办 电脑更新了以前的东西都没了怎么办 安装黑苹果鼠标键盘不能用怎么办 苹果开机卡在白底黑苹果怎么办 信长之野望14没有剧情触发怎么办 玩cf手游手机屏幕摩擦力大怎么办 网吧有战地1没有橘子平台怎么办 俩人打仗了对方想讹我怎么办 环世界模组装多了打不开怎么办 手机百度云视频播放画面太小怎么办 ps文件说数据似乎已经损坏怎么办 百度云中的压缩包下载的很慢怎么办 游戏压缩出现未知错误或损坏怎么办