单源最短路的简单应用

1.dijkstra维护最长路

下面这个是讨论区的一个佬的理解,非常的nice

总结一句话,dijkstra的贪心保证了每次选定的点在之后都不会被其他点所更新了

同理维护最长路的时候我们发现,如果权值是0-1的话,选定的最大值在之后不会变的更大

所以可以用dijkstra来维护最长路

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
double g[2010][2010];
int n,m,s,t;
double dist[N];
bool st[N];
double dijkstra()
{dist[s] = 1.0;for(int i=1;i<=n;i++){int t = -1;for(int j=1;j<=n;j++)if(!st[j]&&(t==-1||dist[j]>dist[t]))t = j;st[t] = 1;for(int j=1;j<=n;j++)if(dist[j]<dist[t]*g[t][j])dist[j] = dist[t]*g[t][j];}return dist[t];
}int main()
{cin>>n>>m;for(int i=1;i<=m;i++){int a,b,c;cin>>a>>b>>c;double z = (100.0-c*1.0)/100.0;g[a][b] = g[b][a] = max(g[a][b],z);}cin>>s>>t;printf("%.8lf",100.0/dijkstra()*1.0);}

2.stringstream处理不定长输入

#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N = 1100;
int g[N][N];
int dist[N];
int a[N];
bool st[N];void dijkstra()
{memset(dist,0x3f,sizeof dist);dist[1] = 0;for(int i=1;i<=n;i++){int  t = -1;for(int j=1;j<=n;j++)if(!st[j]&&(t==-1||dist[j]<dist[t]))t = j;st[t] = 1;for(int j=1;j<=n;j++)if(dist[j]>dist[t]+g[t][j])dist[j] = dist[t] + g[t][j];}
}int main()
{cin>>m>>n;memset(g,0x3f,sizeof g);for(int i=1;i<=n;i++)g[i][i] = 0;getchar();for(int i=1;i<=m;i++){string str;getline(cin,str);stringstream ssin(str);int k  = 1;while(ssin>>a[k])k++;k--;for(int s=1;s<=k;s++)for(int j=1;j<s;j++)g[a[j]][a[s]] = 1;}dijkstra();if(dist[n]==0x3f3f3f3f)cout<<"NO";else cout<<dist[n]-1;}

3.简单虚拟原点

注意酋长不一定是这里面等级最高的 所以我们要枚举区间算好几次dijkstra

#include<iostream>
#include<cstring>
using namespace std;const int N = 1010;
int g[N][N];
int dist[N];
bool st[N];
int m,n;
int level[N];int dijkstra(int l,int r){memset(dist,0x3f,sizeof dist);dist[0] = 0;memset(st,0,sizeof st);for(int i=1;i<=n;i++){int t = -1;for(int j=0;j<=n;j++)if(!st[j]&&(t==-1||dist[j]<dist[t]))t = j;st[t] = 1;for(int j=1;j<=n;j++)if(level[j]>=l&&level[j]<=r)dist[j] = min(dist[j],dist[t]+g[t][j]);}return dist[1];
}int main()
{cin>>m>>n;memset(g,0x3f,sizeof g);for(int i=0;i<=n;i++)g[i][i] = 0;for(int i=1;i<=n;i++){int p,l,x;cin>>p>>l>>x;level[i] = l;g[0][i] = p;for(int j=1;j<=x;j++){int a,b;cin>>a>>b;g[a][i] = min(g[a][i],b);}}int res = 0x3f3f3f3f;for(int i=level[1]-m;i<=level[1];++i)res = min(res,dijkstra(i,i+m));cout<<res;}

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

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

相关文章

【服务发现与配置】Consul特性及搭建

文章目录 一、前言二、概念2.1、什么是Consul&#xff1f;2.2、Consul具有哪些特点?2.3、Consul 架构图2.4、Consul的使用场景 三、安装3.1. 下载3.2. 解压3.3. 拷贝到usr目录下3.4. 查看 安装是否成功3.5. 启动 四、Consul 开机自启动4.1. 路径/usr/lib/systemd/system/&…

4 Paimon数据湖之Hive Catalog的使用

更多Paimon数据湖内容请关注&#xff1a;https://edu.51cto.com/course/35051.html Paimon提供了两种类型的Catalog&#xff1a;Filesystem Catalog和Hive Catalog。 Filesystem Catalog&#xff1a;会把元数据信息存储到文件系统里面。Hive Catalog&#xff1a;则会把元数据…

更改 npm的默认缓存地址

npm的默认缓存一般在C:\Users\用户名\AppData\Roaming路径下的npm和npm_cache&#xff0c;而c盘往往空间不大。 1、在其他盘新建两个文件夹&#xff0c;如D盘&#xff0c;node_cache和node_global。如下图所示。 2、在cmd中执行npm config set prefix “node_cache的路径”&a…

blender动画制作全流程软件

blender官网下载地址 Download — blender.org Blender是一款功能强大的免费开源的3D动画制作软件。它具有广泛的功能和工具&#xff0c;适用于从简单的2D动画到复杂的3D渲染和特效的各种需求。 以下是Blender的一些主要特点&#xff1a; 建模工具&#xff1a;Blender提供了一…

对Mysql和应用微服务做TPS压力测试

1.对Mysql 使用工具&#xff1a;mysqlslap工具 使用命令&#xff1a; mysqlslap -uroot pGG8697000!#--auto generate sql -auto generate sql-load typemixed-concurrency100,200 - number of queries1000-iterations10 - number-int-cols7 - number-charcols13auto genera…

MySQL:锁机制

目录 概述三种层级的锁锁相关的 SQLMyISAM引擎下的锁InnoDB引擎下的锁InnoDB下的表锁和行锁InnoDB下的共享锁和排他锁InnoDB下的意向锁InnoDB下的记录锁&#xff0c;间隙锁&#xff0c;临键锁记录锁&#xff08;Record Locks&#xff09;间隙锁&#xff08;Gap Locks&#xff0…

LiveMedia视频监控汇聚管理平台视频接入方案(二)

上一篇文章中我们介绍了LiveMedia视频监控汇聚管理平台技术方案的架构。今天我们来介绍下LiveMedia视频监控汇聚管理平台的视频接入方案。 视频集控平台建设充分考虑利旧的建设原则&#xff0c;同时根据各个现有视频监控建设情况&#xff0c;考虑统一规划、分布实施的建设方式。…

k8s 配置资源管理

配置资源管理 //Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源&#xff0c;这类数据虽然也可以存放在 Pod 或者镜像中&#xff0c;但是放在 Secret 中是为了更方便的控制如何使用数据&#xff0c;并减少暴露的风险。 有三种类型&#xff1a; ●kubernetes.…

在Node.js中,什么是事件发射器(EventEmitter)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

MATLAB中Line 属性说明

目录 颜色和样式 位置 Line 属性是注释线条的外观和行为。 Line 属性控制 Line 对象的外观和行为。通过更改属性值&#xff0c;可以修改线条的特定方面。使用圆点表示法查询和设置属性。 h annotation("line"); c h.Color; h.Color "red"; 颜色和样…

049-第三代软件开发-软件部署脚本(一)

第三代软件开发-软件部署脚本(一) 文章目录 第三代软件开发-软件部署脚本(一)项目介绍软件部署脚本(一)其他方式 关键字&#xff1a; Qt、 Qml、 bash、 shell、 脚本 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object…

大厂面试题-什么是聚集索引和非聚集索引

1.简单来说&#xff0c;聚集索引就是基于主键创建的索引&#xff0c;除了主键索引以外的其他索引&#xff0c;称为非聚集索引&#xff0c;也叫做二级索引。 2.由于在InnoDB引擎里面&#xff0c;一张表的数据对应的物理文件本身就是按照B树来组织的一种索引结构&#xff0c;而聚…