全源最短路 Johnson算法

news/2025/10/6 17:45:56/文章来源:https://www.cnblogs.com/xdhking/p/19127772

image
image

洛谷p5905

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long LL;
typedef pair<int,int> PII;
const int N=3e3+10,INF=1e9;
vector<PII> edges[N];
int dist[N],n,m;
int cnt[N],h[N];
bool st[N];bool spfa(){memset(h,0x3f,sizeof(h));queue<int> q;q.push(0);st[0]=true;h[0]=0;while(q.size()){int u=q.front();q.pop();st[u]=false;for(auto &[v,w]:edges[u]){if(h[v]>h[u]+w){h[v]=h[u]+w;cnt[v]=cnt[u]+1;if(!st[v]){q.push(v);st[v]=true;}if(cnt[v]>=n+1)return false;}}}return true;
}void dijkstra(int s){for(int i=1;i<=n;i++){dist[i]=INF;}auto cmp=[](PII &x,PII &y){return x.second>y.second;};dist[s]=0;priority_queue<PII,vector<PII>,decltype(cmp)> heap(cmp);heap.push({s,0});while(heap.size()){int u=heap.top().first,d=heap.top().second;heap.pop();if(dist[u]<d)continue;for(auto &[v,w]:edges[u]){if(dist[v]>dist[u]+w){dist[v]=dist[u]+w;heap.push({v,dist[v]});}}}
}int main(){cin.tie(nullptr)->sync_with_stdio(false);cin>>n>>m;for(int i=1;i<=m;i++){int u,v,w;cin>>u>>v>>w;edges[u].push_back({v,w});}for(int i=1;i<=n;i++){edges[0].push_back({i,0});}if(!spfa()){cout<<-1<<endl;return 0;}for(int u=1;u<=n;u++){for(auto &[v,w]:edges[u]){w+=h[u]-h[v];}}for(int i=1;i<=n;i++){dijkstra(i);LL ans=0;for(int j=1;j<=n;j++){if(dist[j]==INF)ans+=1ll*j*INF;elseans+=1ll*j*(dist[j]+h[j]-h[i]);}cout<<ans<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UNION 与 UNION ALL 的区别 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

大学生做爰网站弄一个关于作文的网站怎么做

每日总结 20240221 花自飘零水自流。一种相思&#xff0c;两处闲愁。 —— 李清照「一剪梅红藕香残玉簟秋」 1. stat 在Linux中&#xff0c;stat 是一个用于显示文件或文件系统状态的命令行工具。它提供了关于文件的详细信息&#xff0c;包括文件类型、权限、大小、所有者、修…

网站开发教程视频百度云资源dede怎么做视频网站

目录 输入方法 Scanner类的9大输入方法 输出方法 print println printf 例题实战 题目进阶 输入方法 最常见的输入输出方法 输入Scanner类 Scanner是Java5的新特征&#xff0c;在java.util包里&#xff0c;可以完成用户输入&#xff1a; 导入java.util包 构造Scanner对象&…

《对象创建的秘密:Java 内存布局、逃逸分析与 TLAB 优化详解》 - 实践

《对象创建的秘密:Java 内存布局、逃逸分析与 TLAB 优化详解》 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

go get net/http connections count, using middleware

go, get net/http connection countvar activeConnections int32func handler(w http.ResponseWriter, r *http.Request) {atomic.AddInt32(&activeConnections, 1)defer atomic.AddInt32(&activeConnections,…

win11开机后卡死,磁盘c盘占用100%,解决方案

我的电脑忘记从什么时候开始,打开时有概率卡死,具体表现为点开任何软件都无法加载。 电脑卡死最显著的特征是,打开任务管理器,显示磁盘C盘占用100%。 有概率等一段时间后,磁盘占用率下降,电脑可正常使用。 磁盘卡…

美橙云建站网站改版是什么

文章目录 一、概述1.官方文档2.Docker Compose 生成器3.创建 docker-compose 文件 二、安装准备1. 克隆服务器2.安装 Docker3.安装 docker-compose 三、非安全模式部署1.docker-comepse2.启动 EdgeX Foundry3.访问 UI3.1. consul3.2. EdgeX Console EdgeX Foundry # EdgeX Fou…

跨越国度 解题报告

简要题意 给定平面上 \(n\) 个点和 \(m\) 条边,构成了 \(p\) 个多边形(我们不关心平面上多边形之外的部分),每一个多边形都有一个颜色,颜色总数为 \(c\);相邻的多边形可以通过相邻的边互达,边有边权,如果边权为…

手写Promise核心代码

目录初始结构坑点:this指向问题then执行异常then的参数异步回调保存坑点:resolve和reject在事件循环末尾执行链式调用完整代码 初始结构原生的promise使用new创建一个实例,传入的参数是一个函数,会自动执行。原生的…

手动数据库分库分片策略

手动数据库分片// 手动分片逻辑示例 func getShardDB(userID int) *gorm.DB {dbIndex := userID % 4dsn := fmt.Sprintf("user:pwd@tcp(db-%d:3306)/user_db_%d", dbIndex, dbIndex)db, _ := gorm.Open(mysq…

大数据分析公司季度业绩与技术进展

某大数据分析公司公布季度财报,营收同比增长48%,超出预期。文章重点介绍了其AI驱动技术平台在国防和供应链领域的应用,包括实时战场分析系统和AI原生制造能力等技术架构。财务业绩亮点调整后每股收益16美分,高于去…

十大素材网站百度企业网站建设费用

epoll默认情况下是水平触发模式&#xff0c;这次将epoll设置为边缘触发模式来实现服务器&#xff0c;而客户端直接使用完美回声服务器的客户端。服务器代码#include #include #include #include #include #include #include #include #include const int BUF_SIZE 4;const int…

tmux 终端复用器教程,创建一个持久的会话

下面这个表格对比了两种主流方法的核心操作,你可以快速了解: 特性 tmux (推荐) screen 创建新会话 tmux new-session -s <session_name> screen -S <session_name> 分离会话 Ctrl + B, 松开后按 D Ctrl …

理解Transformer中的位置编码

要理解Transformer中的位置编码(Positional Encoding),核心是先搞懂「为什么需要它」,再用「直观比喻+关键特性」拆解它的设计逻辑,全程避开复杂公式,聚焦「它到底在做什么」。 一、先解决核心问题:为什么需要位…

完整教程:android stdio 的布局属性

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

南阳集团网站建设互联网公司营业执照经营范围

ROS2 — quaternion_inverse() quaternion_inverse() 函数用于计算四元数的逆。四元数是一种在三维空间中表示旋转的数学工具&#xff0c;它由一个实部和三个虚部组成&#xff0c;通常表示为 q w xi yj zk&#xff0c;其中 w 是实部&#xff0c;而 x, y, z 是虚部&#xf…

建设网站哪里好青岛企业展厅设计公司

你们呼唤了无数次的妙记多 Mojidoc PC客户端 Beta版本正式上线啦&#xff01; 感谢300位妙友积极参与内测&#xff0c;给予了我们很多非常有效的意见和建议&#xff01;我们会根据用户反馈不断优化和修复相关功能&#xff0c;在此感谢妙友们一直以来的支持&#xff5e; PC端拥…

网络风险管理的三大关键洞察

本文深入探讨网络风险管理的三大核心洞察:从攻击者视角审视攻击面、基于风险优先级进行漏洞修复,以及通过AI自动化实现主动风险管理。这些策略能帮助企业从被动防御转向主动安全,有效提升整体安全防护水平。网络风险…

鸿蒙UI研发——组件的自适应拉伸

鸿蒙UI研发——组件的自适应拉伸2025-10-06 17:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !import…

网站建设常见问题解决方案wordpress主题手机版不显示侧边栏

这篇文章将详细介绍 如何在 stm32103 板子上点亮一个LED. 文章目录 前言一、开发环境搭建。二、LED 原理图解读三、什么是 GPIO四、cubeMX 配置工程五、解读 cubeMX 生成的代码六、延时函数七、控制引脚状态函数点亮 LED 八、GPIO 的工作模式九、为什么使用推挽输出驱动 LED总结…