HDU - 2066 一个人的旅行
来源:互联网 发布:魏延被谁杀 知乎 编辑:程序博客网 时间:2024/06/04 18:00
题目大意:中文题
解题思路:多源点,任意终点,最短路的变形,用dijkstra或者SPFA都可以,只要把源点设置为多个就可以
任意终点的,那就取每个终点的最小值就可以了
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define INF 0x3f3f3f3f#define N 1010int dis[N][N], d[N];int T, S, D, Max;bool vis[N];void init(){ memset(dis, 0x3f, sizeof(dis)); Max = -1; int x, y, z; for (int i = 0; i < T; i++) { scanf("%d%d%d", &x, &y, &z); if (dis[x][y] > z) { dis[x][y] = dis[y][x] = z; } if (Max < x || Max < y) { Max = max(x, y); } }}int Dijkstra() { memset(vis, 0, sizeof(vis)); for (int i = 1; i <= Max; i++) { d[i] = INF; } int x; for (int i = 0; i < S; i++) { scanf("%d", &x); d[x] = 0; } for (int i = 1; i <= Max; i++) { int x, t = INF; bool flag = false; for (int j = 1; j <= Max; j++) if (t > d[j] && !vis[j]) { t = d[j]; x = j; flag = true; } if(!flag) break; vis[x] = true; for (int j = 1; j <= Max; j++) if (d[x] + dis[j][x] < d[j]) d[j] = d[x] + dis[j][x]; } int ans = INF; for (int i = 0; i < D; i++) { scanf("%d", &x); ans = min(ans, d[x]); } return ans;}int main() { while (scanf("%d%d%d", &T, &S, &D) != EOF) { init(); printf("%d\n",Dijkstra()); } 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(一个人的旅行)
- leetcode:the skyline problem
- linux性能评测工具2-Google perftools
- 7.31 Django学习第三章
- spark源码分析--Master和worker建立连接
- 弗洛伊德算法
- HDU - 2066 一个人的旅行
- Reorder List --LeetCode
- windows10安装过程以及使用感受
- Android如何让软键盘出现和消失
- 第73讲:Scala界面和事件处理编程进阶实战学习笔记
- 递归--小游戏
- Qt点击按钮打开图片
- Mysql之查询、where、常用函数、having
- 面试题37_两个链表的第一个公共结点