HDU 2066 一个人的旅行
来源:互联网 发布:泰瑞克埃文斯生涯数据 编辑:程序博客网 时间:2024/06/06 07:17
题目链接
题目意思
给你T条路,现在小草要从S个与他相邻的城市出发,去D个目的地中的一个,要你求到达目的地的最短时间。
解题思路
这就一道用dijkstra的最短路的题。这道题中的坑点就是小草到他相邻的城市的距离是0。用dijkstra跑一遍就出答案啦!
代码部分
#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>#include <queue>using namespace std;const int INF=99999;int map[1010][1010];int dis[1010];///存储最短路int vis[1010];///标记数组int nex[1010];///记录与他相邻的城市int ed[1010];///记录目的地int t,s,d,n;int dijkstra(){ int pos; memset(vis,0,sizeof(vis)); for(int i=0; i<=n; i++) dis[i]=map[0][i]; vis[0]=1; for(int i=1; i<=n; i++) { int min=INF; for(int j=1; j<=n; j++) { if(!vis[j]&&min>dis[j]) { min=dis[j]; pos=j; } } vis[pos]=1; for(int j=1; j<=n; j++) { if(!vis[j]&&dis[j]>map[pos][j]+dis[pos]) dis[j]=map[pos][j]+dis[pos]; } }}int main(){ int a,b,tim,ans; while(scanf("%d%d%d",&t,&s,&d)!=EOF) { n=0; for(int i=0; i<1010; i++) for(int j=0; j<1010; j++) { map[i][j]=INF; map[i][i]=0; } while(t--) { scanf("%d%d%d",&a,&b,&tim); n=max(max(n,a),b); if(map[a][b]>tim) map[a][b]=map[b][a]=tim; } ans=INF; for(int i=0; i<s; i++) { scanf("%d",&nex[i]); map[0][nex[i]]=map[nex[i]][0]=0; } for(int i=0; i<d; i++) { scanf("%d",&ed[i]); } dijkstra(); for(int i=0; i<d; i++) { ans=min(ans,dis[ed[i]]); } printf("%d\n",ans); } return 0;}
阅读全文
0 0
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU-2066 一个人的旅行
- Hdu-2066 一个人的旅行
- HDU 2066 一个人的旅行
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行
- HDU 2066 一个人的旅行
- HDU 2066 一个人的旅行
- hdu 2066(一个人的旅行)
- 高德地图
- 第六周
- 隐藏滚动条的方法
- c3p0配置模板
- Hbuilder启动夜神游模拟器失败,解决方案
- HDU 2066 一个人的旅行
- 10月上旬考试小总结
- 洛谷 P3387 【模板】缩点
- Leetocode之Find Duplicate File in System 问题
- Windows环境下Ctex+WinEdt Latex安装测试
- ros机器人的直行
- ROM、PROM、EPROM、EEPROM、Flash ROM分别指什么?
- 053 函数图形的描绘
- 1.3 PCI&PCIE MSI中断