[蓝桥杯练习]蓝桥王国

单源最短路径问题-dj

在这里插入图片描述
在这里插入图片描述

#include<bits/stdc++.h>
#define ll long long  
using namespace std;
const int N=3e5+5,M=1e6+5;
const ll INF=0x7f7f7f7f7f7f7f;//7个7f没问题,INF <= INF+x 
struct edge{int to;ll w;edge(int end,ll cost){to=end;w=cost;}
};
struct node{int id;ll setdis;//id:结点;setdis:这个结点到集合内的点最短的距离node(int num,ll len){id=num;setdis=len;}bool operator <(const node& cur)const{return setdis > cur.setdis;}//小根堆按照dis的升序来排序自定义的node对象//{return cur.dis < dis;}  //大根堆按照dis的降序来排序自定义的node对象//要将 < 运算符重载为适用于小根堆需要确保当 新结点cur的dis值 < 当前对象的dis值时,函数返回true。//*this(隐式参数)代表当前对象,即调用运算符重载函数的对象//将具有较小dis值的节点被放置在更接近堆顶的层次
};
vector<vector<edge>>adjtable(M);
priority_queue<node>wait;//小根堆,优先队列,存结点信息,弹出距离集合最近节点
int n,m;
ll setdis[N];//记录所有结点到集合的最近距离
bool hasmin[M];//hasmin[i]=true表示到结点i的最短路径已经找到
bool haspath[N];//如果不想用INF判定,则开个数组表示是否有通路
int pre[N];//记录前驱结点,用于生成路径
void print_path(int start,int end){		  //打印从s到t的最短路if(start==end){cout<<start;return;}  	   //打印起点print_path(start,pre[end]);                //先打印前一个点cout<<end;			                      //后打印当前点。最后打印的是终点t
}
void dj(){while(!wait.empty()){node cur = wait.top();wait.pop();//小根堆,弹出距起点start距离最小的结点minnodeif(hasmin[cur.id])continue;//丢弃已经找到最短路径的结点hasmin[cur.id]=true;haspath[cur.id]=true;//标记已访问 和有最短路径 for(edge adj:adjtable[cur.id]){//检查当前点的所有邻边if(hasmin[adj.to])continue;//丢弃已经找到最短路径的邻居结点 if(setdis[adj.to] > adj.w + cur.setdis){//如果邻点到起点的距离 大于 若当前点到起点的距离 + 邻点到当前点的边权 ,则更新邻点到起点的距离为中转当前点再过去的两端距离和 setdis[adj.to] = adj.w + cur.setdis;//邻点最短距离=邻边权重+最近点到起点的距离wait.push(node(adj.to,setdis[adj.to]));//扩展新的邻居,放到优先队列中//pre[adj.to]=cur.id;		//如果有需要,记录路径
}	}	}	
// print_path(s,n);          			  //如果有需要,打印路径: 起点1,终点n
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);memset(setdis,INF,sizeof(setdis));//memset是按字节赋值,所以应当是0x7f 
//	for(ll x:sdis)x=0x7f7f7f7f7f7f7f;  //循环应该是赋真值 memset(hasmin,false,sizeof(hasmin));cin>>n>>m;while(m--){int v1,v2;ll w;cin>>v1>>v2>>w;adjtable[v1].push_back(edge(v2,w));// adjtable[v2].push_back(edge(v1,w));    //无向图或重边}int start_id;//cin>>start_id;start_id=1;//haspath[start_id]可以不加,但是最好加上 wait.push(node(start_id,0));//起点进队列,起点到自己的距离是0setdis[start_id]=0;dj();for(int i=1;i<=n;++i){//输出到每个点的最短路径
//		if(setdis[i]>=0x7f7f7f7f7f7f7f)cout<<"-1 ";if(!haspath[i])cout<<"-1 ";else cout<<setdis[i]<<" ";}return 0;
}

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

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

相关文章

Flutter应用混淆技术原理与实践

在移动应用开发中&#xff0c;保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具&#xff0c;帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆&#xff0c;并提供了相关的操作步骤和注意事项。 &#x1f4dd; 摘要 本…

pycharm复习

目录 1.基础语法 2.判断语句 3.while循环 4.函数 5.数据容器 1.基础语法 1.字面量 2.注释&#xff1a; 单行注释# 多行注释" " " " " " 3.变量&#xff1a; 变量名 变量值 print&#xff1a;输出多个结果&#x…

JVM 记录

记录 工具 https://gceasy.io 资料 尚硅谷宋红康JVM全套教程&#xff08;详解java虚拟机&#xff09; https://www.bilibili.com/video/BV1PJ411n7xZ?p361 全套课程分为《内存与垃圾回收篇》《字节码与类的加载篇》《性能监控与调优篇》三个篇章。 上篇《内存与垃圾回收篇…

JavaScript 对象管家 Proxy

JavaScript 在 ES6 中&#xff0c;引入了一个新的对象类型 Proxy&#xff0c;它可以用来代理另一个对象&#xff0c;并可以在代理过程中拦截、覆盖和定制对象的操作。Proxy 对象封装另一个对象并充当中间人&#xff0c;其提供了一个捕捉器函数&#xff0c;可以在代理对象上拦截…

基于Zabbix 5.0 实现windows服务器上应用程序和主机端口的状态监控

基于Zabbix 5.0 实现windows服务器上应用程序和主机端口的状态监控 背景 用python开发的应用程序在服务器上运行,有时候会出现程序自动退出却收不到告警的情况 环境 zabbix服务器:Centos7 64位 Windows服务器: Windows 10 64位 软件 zabbix_server:zabbix5.0 zabbix_…

680.验证回文串II-力扣

680.验证回文串II-力扣 给你一个字符串 s&#xff0c;最多可以从中删除一个字符。 请你判断 s 是否能成为回文字符串&#xff1a;如果能&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false。 示例1&#xff1a; 输入&#xff1a;s “aba” 输出&#xff1a;true示…

如何制作一个微信小程序商城?

在这个数字化飞速发展的时代&#xff0c;微信小程序商城以其独特的便捷性和高效的用户连接能力&#xff0c;成为了电商领域的一颗新星。对于那些渴望在微信平台上开展业务的商家和企业来说&#xff0c;微信小程序商城不仅是一种新的尝试&#xff0c;更是一个充满无限可能的商机…

2024年文化传播、交流与考古学国际会议 (CCEA 2024)

2024年文化传播、交流与考古学国际会议 (CCEA 2024) 2024 International Conference on Cultural Communication, Exchange, and Archaeology 【会议简介】 2024年文化传播、交流与考古学国际会议即将在千年古都西安盛大召开。本次会议将汇聚全球文化、传播、考古等领域的专家…

每日一题(leetcode2952):添加硬币最小数量 初识贪心算法

这道题如果整体去思考&#xff0c;情况会比较复杂。因此我们考虑使用贪心算法。 1 我们可以假定一个X&#xff0c;认为[1,X-1]区间的金额都可以取到&#xff0c;不断去扩张X直到大于target。&#xff08;这里为什么要用[1,X-1]而不是[1,X],总的来说是方便&#xff0c;潜在思想…

浏览器工作原理与实践--async/await:使用同步的方式去写异步代码

在上篇文章中&#xff0c;我们介绍了怎么使用Promise来实现回调操作&#xff0c;使用Promise能很好地解决回调地狱的问题&#xff0c;但是这种方式充满了Promise的then()方法&#xff0c;如果处理流程比较复杂的话&#xff0c;那么整段代码将充斥着then&#xff0c;语义化不明显…

使用Bitmaps位图实现Redis签到

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Redis提供了Bitmaps这个“数据类型”可以实现对位的操作: (1) Bitmaps…

基于Weibull、Beta、Normal分布的风、光、负荷场景生成及K-means场景削减方法

目录 一、主要内容&#xff1a; 二、代码运行效果&#xff1a; 三、Weibull分布与风机风速&#xff1a; 四、Beta分布与光伏辐照度&#xff1a; 五、Normal分布与电负荷&#xff1a; 六、K-means聚类算法&#xff1a; 七、完整代码数据下载&#xff1a; 一、主要内容&am…

【数论】莫比乌斯反演(欧拉反演)进阶-杜教筛

文章目录 前言 回忆 题集12 杜教筛例题 前言 这里需要对莫反有一些基础。 不会的可以点这里 回忆 f ( n ) ∑ d ∣ n g ( d ) → g ( n ) ∑ d ∣ n f ( d ) μ ( n d ) f(n)\sum_{d|n}g(d)\rightarrow g(n)\sum_{d|n}f(d)\mu(\frac{n}{d}) f(n)∑d∣n​g(d)→g(n)∑d∣n​…

Windows如何优雅的运行ROS2/linux

Windows如何优雅的运行ROS2/linux 前言 在ROS/ROS2开发过程中&#xff0c;大家普遍使用到的分布式开发方法都是基于虚拟机/双系统进行&#xff0c;本质上是希望基于Ubuntu良好的生态环境进行&#xff0c;但是两种方式各有各自的好处&#xff0c;也有各自的弊端&#xff0c;例…

docker 部署 nali 开源 IP 地理信息归属查询软件

前言 早前用到一个小巧开源的 IP 归属地查询软件&#xff0c;官方提供了 Dockerfile&#xff0c;使用了一段时间觉得还不错&#xff0c;非常简单便捷。 部署 docker 启动 由于该项目会在首次启动自动下载 IP 数据库,所以最好通过挂载目录的方式,将数据库目录挂在到本地,避免…

Java零基础入门到精通_Day 4

方法的重载 就是同一个类中的相同方法名的多个方法&#xff0c;但是他们的参数不同&#xff0c;类型不同或者参数个数不同。 &#xff08;与返回值无关&#xff09; package Base_One;public class Base_005 {public static void main(String[] args) {// Main method logic …

经久耐用耐强腐蚀PFA材质气体洗涤瓶全氟烷氧基树脂尾气吸收瓶

PFA洗气瓶是一种常用于净化和干燥各种气体的实验室器皿&#xff0c;以去除其中的水分、油脂、颗粒物等杂质&#xff0c;从而使需要用到的气体满足实验要求。 PFA气体吸收瓶 PFA洗气瓶的工作原理&#xff1a; 主要是通过液体吸收、溶解或发生化学反应来去除气体中的杂质。在洗气…

Python基础之pandas:文件读取与数据处理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、文件读取1.以pd.read_csv()为例&#xff1a;2.数据查看 二、数据离散化、排序1.pd.cut()离散化&#xff0c;以按范围加标签为例2. pd.qcut()实现离散化3.排序4.…

新质生产力崛起,运营商前端运营如何跃升

“新质生产力”一个当前的热搜高频词&#xff0c;今年还被首次写进政府工作报告&#xff0c;是2024年十大工作任务的首位。那么什么是“新质生产力”&#xff1f;它对于我们的生活、学习、工作及未来发展有什么影响呢&#xff1f;今天小宝就抛砖引玉来讲一讲“新质生产力”对于…

整顿编剧市场:程序员提交测试流程的最佳实践

讲动人的故事,写懂人的代码 最近,一部去年推出的国产电视剧在IT圈子里引起了轰动。 引起关注的原因,并非剧中程序员的外形出众,而是她提交代码测试的方式——将写有代码的纸张放入文件夹,然后递给了对面的测试人员。如图1所示。 图1 程序员将写有代码的纸张放入文件夹,并…