当前位置: 首页 > news >正文

最短路 - # P4779 【模板】单源最短路径(标准版)

题目背景

2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路。

然后呢?

\(100 \rightarrow 60\)

\(\text{Ag} \rightarrow \text{Cu}\)

最终,他因此没能与理想的大学达成契约。

小 F 衷心祝愿大家不再重蹈覆辙。

题目描述

给定一个 \(n\) 个点,\(m\) 条有向边的带非负权图,请你计算从 \(s\) 出发,到每个点的距离。

数据保证你能从 \(s\) 出发到任意点。

输入格式

第一行为三个正整数 \(n, m, s\)
第二行起 \(m\) 行,每行三个非负整数 \(u_i, v_i, w_i\),表示从 \(u_i\)\(v_i\) 有一条权值为 \(w_i\) 的有向边。

输出格式

输出一行 \(n\) 个空格分隔的非负整数,表示 \(s\) 到每个点的距离。

输入输出样例 #1

输入 #1

4 6 1
1 2 2
2 3 2
2 4 1
1 3 5
3 4 3
1 4 4

输出 #1

0 2 4 3

说明/提示

样例解释请参考 数据随机的模板题。

\(1 \leq n \leq 10^5\)

\(1 \leq m \leq 2\times 10^5\)

\(s = 1\)

\(1 \leq u_i, v_i\leq n\)

\(0 \leq w_i \leq 10 ^ 9\),

\(0 \leq \sum w_i \leq 10 ^ 9\)

本题数据可能会持续更新,但不会重测,望周知。

题解

  1. Dijkstra 算法(适用于非负权图)
  2. 使用优先队列优化:每次插入和更新操作 \(O(log N)\),总复杂度 \(O((N+E) log N)\) ,适合稀疏图。
#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;
typedef long long ll;
const int maxn = 100004;
const int maxm = 200005;
const ll INF = 0x3f3f3f3f3f3f3f3fLL;
int head[maxn], to[maxm], nxt[maxm], w[maxm];
ll Dist[maxn];struct node {int pos;ll dis;bool operator<(const node &T) const {return dis > T.dis; // 最小堆}
};priority_queue<node> Q;int main() {int n, m, s;cin >> n >> m >> s;for (int i = 1; i <= m; i++) {int x, y, z;scanf("%d%d%d", &x, &y, &z);to[i] = y;nxt[i] = head[x];head[x] = i;w[i] = z;}for (int i = 1; i <= n; i++) Dist[i] = INF;Dist[s] = 0;Q.push({s, 0});while (!Q.empty()) {node T = Q.top(); Q.pop();int u = T.pos;ll d = T.dis;if (d > Dist[u]) continue; // 过时节点跳过for (int e = head[u]; e != 0; e = nxt[e]) {int v = to[e];ll nd = d + w[e];if (nd < Dist[v]) {Dist[v] = nd;Q.push({v, nd});}}}for (int i = 1; i <= n; i++) {if (Dist[i] == INF) printf("INF ");else printf("%lld ", Dist[i]);}printf("\n");return 0;
}
http://www.jsqmd.com/news/429334/

相关文章:

  • 基于Nginx、Java、NFS实现动静分离的前后端分离架构
  • SimpleMindMap 私有部署后cpolar实现远程协作,实用超丝滑。
  • 联合利华任命前员工担任CIO职位负责核心IT运营
  • 【GitHub项目推荐--WiFi DensePose:基于WiFi CSI的隐私保护人体姿态估计系统】⭐⭐⭐⭐⭐
  • 预训练视觉模型赋能强化学习:基于VPT微调在开放世界任务中的样本效率与性能增益分析
  • 【车间调度】基于matlab模拟退火算法考虑在料品和成品库存受资源约束和截止日期影响的无关并行机调度问题UPMSP【含Matlab源码 15099期】
  • MyBatis-Plus的ActiveRecord 模式
  • 【优化配置】基于matlab遗传算法GA配置配电网络IEEE33和69总线【含Matlab源码 15100期】
  • 2026最火Skills技术向入门:分清与Agent的区别,Skills大爆发!掌握这4点,让你的技术工作效率飙升100倍!
  • LLM 算法岗 | 字节面试高频 leetcode 算法题汇总,附 leetcode 链接
  • 搭建电动汽车直线制动ABS模型:MATLAB/Simulink实践指南
  • Task06:秋招秘籍 B
  • 3月3日直播 | 基于下一代Ascend平台的纯SIMT编程介绍
  • 【UI自动化测试】7_Appium基础API _元素定位
  • 最短路 - [USACO09NOV] Job Hunt S
  • DOA-CNN-LSTM分类预测+SHAP分析+特征依赖图!深度学习可解释分析,Matlab代码实现
  • Task06:秋招秘籍 C
  • Task04:集合运算
  • 求职】网络工程专业简历怎么写?校招/社招通用模板(附可直接复制写法)
  • Task06:秋招秘籍 A
  • 人生第一份简历——2025年春
  • Task05:SQL高级处理
  • AT_arc199_a [ARC199A] Flip Row or Col 2
  • Task02:基础查询与排序(一)
  • Task03:复杂一点的查询(二)
  • 提示工程ROI评估与风险控制:架构师教你怎么平衡收益与风险
  • 工作感受月记(202603月)
  • 一个月入千美元的游戏站 和 游戏周边站建站技巧
  • 2026年3月广州GEO系统公司推荐,技术、案例、服务三维数据透视 - 品牌鉴赏师
  • 高清流程图|AI应用架构师教你设计AI智能体的“任务分解”机制