单源最短路总结+练习题

单源最短路总结

文章目录

建图方式

  • 普通无向图+邻接表建图

板子题

1129. 热浪 - AcWing题库

找最短路里的最长路

1128. 信使 - AcWing题库

经典问题,在无向图中找一点使得其他点到该点距离最小

跑n遍最短路即可

1127. 香甜的黄油 - AcWing题库

考察对dijkstra贪心本质的理解,修改了最短路更新的形式

也可以不想这些,用数学构造出一个新的最短路

1126. 最小花费 - AcWing题库

集合之间的最短路问题,有n个连通块,求到终点最少经过几个连通块。

处理方式很简单,只要让每一条边的边权都为1,跑一遍最短路即可,原理也很简单可以自行推导

920. 最优乘车 - AcWing题库

  • 新建源点建图

有一些题看不出来是最短路,是因为他没有直接问你从起点到终点的最短路。

例如超市购物问题/以物易物问题

903. 昂贵的聘礼 - AcWing题库

这时候就可以通过建立一个新的源点0,然后用0作为起点建图

  • 正反建图+spfa

刷到一道题,需要我们找到1~N这条路径里的两个有序的点,一个在前一个在后。

然后让后减前得到最大值。

由于这两个点是在1~N这条路径上,所以最好用spfa

另外,我们让前面最小,让后面最大怎么办?

首先我们就要界定一个中间点i,

然后求出 1~i 的小权值,和i~n的最大权值即可

前者我们以1为起点跑一遍spfa即可

后者我们不可能以i为点跑spfa,这样复杂度过高。

所以需要以n为起点,这样只要一遍就可以得到答案

但是由于可能会有单向边

所以最好反过来建图

341. 最优贸易 - AcWing题库

单源最短路综合运用

dijkstra+dfs

很板,没什么特点。

1135. 新年好 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
#define INF 1e10
#define PII pair<int,int>struct ggg{int v;int w;
};ll ans=0;vector<int> dijkstra(vector<ggg>*gg,int n,int start){vector<int> dist(n+1,INF);vector<bool> flag(n+1);priority_queue<PII,vector<PII>,greater<PII>> q;dist[start]=0;q.push({dist[start],start});while(q.size()){int u=q.top().second;q.pop();if(flag[u])continue;for(auto i:gg[u]){int v=i.v;int w=i.w;if(dist[v]>dist[u]+w){dist[v]=dist[u]+w;q.push({dist[v],v});}}}return dist;}
signed main(){int n,m;cin>>n>>m;vector<int> t(5);for(int i=0;i<5;i++)cin>>t[i];vector<ggg> gg[n+1];while(m--){int u,v,w;cin>>u>>v>>w;gg[u].push_back(ggg{v,w});gg[v].push_back(ggg{u,w});}vector<int> a(5);vector<int> dist[n+1];dist[1]=dijkstra(gg,n,1);for(int i=0;i<5;i++){a[i]=i;dist[t[i]]=dijkstra(gg,n,t[i]);}int ans=0;int bns=1e10;ans=0;ans+=dist[1][t[0]];for(int i=0;i<4;i++){ans+=dist[t[i]][t[i+1]];}bns=min(bns,ans);while(next_permutation(a.begin(),a.end())){ans=0;ans+=dist[1][t[a[0]]];for(int i=0;i<4;i++){ans+=dist[t[a[i]]][t[a[i+1]]];}bns=min(bns,ans);}cout<<bns<<endl;
}

dijkstra+二分答案

二分可行性

340. 通信线路 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 1e9
#define PII pair<ll,ll>
//#define int long long
struct ggg{int v;int w;
};int spfa(vector<ggg>*gg,int n,int k,int K){vector<ll> dist(n+1,INF);vector<bool> flag(n+1);priority_queue<PII,vector<PII>,greater<PII> > q;dist[1]=0;q.push({0,1});while(q.size()){int u=q.top().second;q.pop();if(flag[u])continue;flag[u]=1;for(auto i:gg[u]){int v=i.v;int w=i.w;if(dist[v]>dist[u]+(w>=k?1:0)){dist[v]=dist[u]+(w>=k?1:0);q.push({dist[v],v});}}}return dist[n]<=K;
}signed main(){int n,p,k;cin>>n>>p>>k;vector<ggg> gg[n+1];while(p--){int u,v,w;cin>>u>>v>>w;gg[u].push_back({v,w});gg[v].push_back({u,w});}int l=0; int r=1e9,mid;while(l<r){mid=l+r+1>>1;if(spfa(gg,n,mid,k)){r=mid-1;}else l=mid;}if(r!=1e9)cout<<r<<endl;else cout<<-1<<endl;}

未完待续…

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

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

相关文章

每日五道java面试题之java基础篇(九)

目录&#xff1a; 第一题 你们项⽬如何排查JVM问题第二题 ⼀个对象从加载到JVM&#xff0c;再到被GC清除&#xff0c;都经历了什么过程&#xff1f;第三题 怎么确定⼀个对象到底是不是垃圾&#xff1f;第四题 JVM有哪些垃圾回收算法&#xff1f;第五题 什么是STW&#xff1f; 第…

MySQL 基础知识(六)之数据查询(二)

目录 6 数值型函数 7 字符串函数 8 流程控制函数 9 聚合函数 10 分组查询 (group by) 11 分组过滤 (having) 12 限定查询 (limit) 13 多表查询 13.1 连接条件关键词 (on、using) 13.2 连接算法 13.3 交叉连接 (cross join) 13.4 内连接 (inner join) 13.5 外连接 …

力扣hot3--并查集+哈希

第一想法是排个序然后遍历一遍&#xff0c;but时间复杂度就超啦 并查集居然与哈希结合了&#xff08;&#xff09; 已经好久没用过并查集了&#xff0c;&#xff0c;&#xff0c;我们用哈希表f_node中来记录原结点的父节点&#xff0c;其中key是原结点&#xff0c;value是父节点…

Cannot resolve symbol ‘@+id/modifyAvatar‘

问题 Cannot resolve symbol id/modifyAvatar详细问题 笔者进行Android开发&#xff0c;创建组件id&#xff0c;报红。 鼠标放置报红处&#xff0c;提示 Cannot resolve symbol id/modifyAvatar解决方案 顶部菜单栏 → \rightarrow →Build → \rightarrow →Rebuild proje…

推荐《架构探险:从零开始写Java Web框架》

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 春节读了《架构探险&#xff1a;从零开始写Java Web框架》&#xff0c;一本大概10年前的好书。 本书的作者是阿里巴巴架构师黄勇。黄勇对分布式服务架构与大数据技术有深入…

QT 菜单栏

添加/删除菜单栏 默认情况下QMainWindow项目一创建就自带了菜单栏&#xff0c;可以在对象树窗口中&#xff0c;右键菜单栏对象&#xff0c;移除菜单栏&#xff1a; 删除后也可以创建菜单栏&#xff0c;此时在对象树中右键MainWindow对象&#xff0c;菜单里边会多了创建菜单栏的…

Repo命令使用实例(三十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

相机图像质量研究(18)常见问题总结:CMOS期间对成像的影响--CFA

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

c++STL系列——(九)迭代器

在C的标准模板库&#xff08;STL&#xff09;中&#xff0c;迭代器&#xff08;iterator&#xff09;是一种提供对容器中元素访问的抽象概念&#xff0c;它为STL提供了统一的访问接口&#xff0c;使得算法可以独立于具体容器类型进行操作。迭代器类似于指针&#xff0c;允许我们…

js中函数缓存详解(如何实现和应用场景)

文章目录 一、是什么二、如何实现闭包柯里化高阶函数 三、应用场景参考文献 一、是什么 函数缓存&#xff0c;就是将函数运算过的结果进行缓存 本质上就是用空间&#xff08;缓存存储&#xff09;换时间&#xff08;计算过程&#xff09; 常用于缓存数据计算结果和缓存对象 …

Vue2学习第二天

Vue2 学习第二天 1. 数据绑定 Vue 中有 2 种数据绑定的方式&#xff1a; 单向绑定(v-bind)&#xff1a;数据只能从 data 流向页面。双向绑定(v-model)&#xff1a;数据不仅能从 data 流向页面&#xff0c;还可以从页面流向 data。 备注&#xff1a; 双向绑定一般都应用在表单…

Kotlin:单例模式(项目使用实例)

摘要 单例模式主要的五种如下&#xff1a; 饿汉式懒汉式线程安全的懒汉式双重校验锁式&#xff08;Double Check)静态内部类式 一、项目使用单例模式实例场景 app在运行时缓存部分数据&#xff0c;作为全局缓存数据&#xff0c;以便其他页面及时更新页面对应状态的数据&…

[爬虫] 爬取B站的弹幕,通过bvid或者a_id、c_id

起因&#xff1a; 我需要爬取B站的动漫信息&#xff0c;包括弹幕 可能用到的API&#xff1a; 获取动漫的每集信息&#xff08;包含a_id和c_id&#xff09; https://api.bilibili.com/pgc/web/season/section?season_id34404 获取弹幕&#xff08;需要a_id和c_id&#xff09…

html的表格标签

html的表格标签 table标签:表示整个表格tr:表示表格的一行td:表示一个单元格th:表示表头单元格.会居中加粗thead:表格的头部区域 (注意和th区分,范围是比th要大的).tbody:表格得到主体区域. table包含tr , tr包含td或者th. 表格标签有一些属性&#xff0c;可以用于设置大小边…

Codeforces Round 920 (Div. 3)

D. Very Different Array&#xff08;贪心双指针/前缀和&#xff09; 思路&#xff1a;绝对值就是线段-->让线段最长&#xff08;肯定是越在最短端找最右端的 越最右端找最左端的&#xff09;-->判断怎么连哪段最长(采用双指针的策略去判断&#xff09; &#xff08;左红…

七天爆肝flink笔记

一.flink整体介绍及wordcount案例代码 1.1整体介绍 从上到下包含有界无界流 支持状态 特点 与spark对比 应用场景 架构分层 1.2示例代码 了解了后就整个demo吧 数据源准备 这里直接用的文本文件 gradle中的主要配置 group com.example version 0.0.1-SNAPSHOTjava {sour…

通过`ssh`同步`tmux`剪贴板内容

通过ssh同步tmux剪贴板内容 通过ssh连接远程服务器时&#xff0c;可以通过xclip同步tmux剪贴板内容。这需要在服务器上安装xclip&#xff0c;且需要在ssh远程连接时开启X11。 此处附tmux剪贴板调用xclip的配置&#xff1a; # Copy the current buffer to the system clipboa…

网络爬虫实战 | 上传以及下载处理后的文件

以实现爬虫一个简单的&#xff08;SimFIR (doctrp.top)&#xff09;网址为例&#xff0c;需要遵循几个步骤&#xff1a; 1. 分析网页结构 首先&#xff0c;需要分析该网页的结构&#xff0c;了解图片是如何存储和组织的。这通常涉及查看网页的HTML源代码&#xff0c;可能还包…

[Python进阶] 使用__import__函数动态导入模块

2.16 使用__import__函数动态导入模块 在Python中&#xff0c;__import__是一个内置函数&#xff0c;用于动态导入模块。它的语法如下&#xff1a; import(name, globalsNone, localsNone, fromlist(), level0) 其中&#xff0c;name是要导入的模块名称&#xff0c;globals和l…

基于FPGA的ECG信号滤波与心率计算verilog实现,包含testbench

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ECG信号的特点与噪声 4.2 FPGA在ECG信号处理中的应用 4.3 ECG信号滤波原理 4.4 心率计算原理 4.5 FPGA在ECG信号处理中的优势 5.算法完整程序工程 1.算法运行效果图预览 其RTL结构如…