题目
题目链接
题解最短路(扩展)
算是朴素Dijkstra模板吧。
Dijkstra算法
额外加上记录路径、记录到达此处的最短距离、记录以最短距离到达此处的最多人数。
更新方式:
假设未确定距离的点集中的点t
距离已确定距离的点集最近,以t
对其他未确定距离的点j
进行松弛。即: 如果从
s
到j
经过t
的距离比不经过t
短,则说明经过t
更好,那么更新j
的前一个节点为t
,更新到达j
的最大人数为到达t
的最大人数+节点j
的人数,更新到达j
且距离最小的路径个数为到达t
的路径个数;
如果从s
到j
经过t
的距离与不经过t
一样长,那么让到达j
且距离最小的路径个数加上到达t
的路径个数,即到达j
且距离最小的路径个数应该包括距离最小的前提下,经过t
和不经过t
的路径个数和,所以是加上;再判断,如果经过t
后j
的人数会变多,那么更新j
的前一个节点为t
,更新到达j
的最大人数为到达t
的最大人数+节点j
的人数。
如果从s
到j
经过t
的距离比不经过t
长,说明这条路径连最短路都不是,条件都满足不了,就不用处理了。
#include
using namespace std;
const int N = 510;
int n, m, s, d, a[N], cnt[N], e[N][N], dis[N], pre[N], st[N], sum[N];
void path (int x) {
if(pre[x] != -1) {
path(pre[x]);
cout m >> s >> d;
for (int i = 0;i > a[i];
while (m --) {
int a, b, c;
cin >> a >> b >> c;
e[a][b] = e[b][a] = c;
}
// 初始化
dis[s] = 0;
sum[s] = a[s];
cnt[s] = 1;
for (int i = 0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?