博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3631 Shortest Path
阅读量:5366 次
发布时间:2019-06-15

本文共 1663 字,大约阅读时间需要 5 分钟。

floyd插点。(看起来难实际很简单)

给你一个有向多重图(就是可能会有重边和自环,对应简单图),会标记一些点,然后再询问给定两点的最短路,要求该最短路上经过的点都是被标记过的(必然包括起点终点)。

权值都为正,看样例,发现当起点终点相同时最短路必然是0(当然这个点得标记过才行)。其实这题就是把floyd的第一层循环k拆成在线处理了,给一个标记点,然后就运行一遍以这个标记点为k值的2/3版的floyd就完事了,当问最短路的时候都是建立在这句之前的操作上,那么就直接输出当前结果就ok了。

理解floyd的动态规划本质,所谓k就是个中介点,而且不用关心k的循环次序。每次输出的最短路绝对不会经过没标记的点,因为之前没拿那些点当中介点。

这道题输出也给你玩个文字游戏,要求每相邻两个case之间才能有空行,最后不能有。

#include 
#include
#include
#include
#include
#include
#include
using namespace std;const int INF = 1e9;const int MAX = 300 + 5;int N, M, Q;int g[MAX][MAX];bool mark[MAX];void init(){ for (int i = 0; i < N; i++) { g[i][i] = 0; // for (int j = i + 1; j < N; j++) // 这样就比较简洁 { g[i][j] = g[j][i] = INF; } } memset(mark, 0, sizeof mark);}void floyd_k(int k){ for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (g[i][k] != INF && g[k][j] != INF && g[i][k] + g[k][j] < g[i][j]) { g[i][j] = g[i][k] + g[k][j]; } } }}int main(){ int a, b, c; for (int cnt = 1; ~scanf("%d%d%d", &N, &M, &Q); cnt++) { if (!N && !M && !Q) break; init(); for (int i = 0; i < M; i++) { scanf("%d%d%d", &a, &b, &c); g[a][b] = min(g[a][b], c); } if (cnt != 1) printf("\n"); printf("Case %d:\n", cnt); for (; Q--;) { scanf("%d", &a); if (a == 0) { scanf("%d", &b); if (mark[b]) printf("ERROR! At point %d\n", b); else { mark[b] = true; floyd_k(b); } } else { scanf("%d%d", &b, &c); if (!mark[b] || !mark[c]) printf("ERROR! At path %d to %d\n", b, c); else if (g[b][c] == INF) printf("No such path\n"); else printf("%d\n", g[b][c]); } } //printf("\n"); } return 0;}

转载于:https://www.cnblogs.com/CrossingOver/p/10704833.html

你可能感兴趣的文章
信息浏览器从Android的浏览器中传递cookie数据到App中信息浏览器
查看>>
hash储存机制
查看>>
OpenLayers绘制图形
查看>>
tp5集合h5 wap和公众号支付
查看>>
Flutter学习笔记(一)
查看>>
iOS10 国行iPhone联网权限问题处理
查看>>
洛谷 P1991 无线通讯网
查看>>
mysql asyn 示例
查看>>
数据库第1,2,3范式学习
查看>>
《Linux内核设计与实现》第四章学习笔记
查看>>
Docker 安装MySQL5.7(三)
查看>>
CSS: caption-side 属性
查看>>
CSS3中box-sizing的理解
查看>>
Web.Config文件配置之配置Session变量的生命周期
查看>>
mysql导入source注意点
查看>>
linux下编译安装nginx
查看>>
DLL 导出函数
查看>>
windows超过最大连接数解决命令
查看>>
12个大调都是什么
查看>>
angular、jquery、vue 的区别与联系
查看>>