单源最短路的简单应用

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.mfbz.cn/a/127178.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

跨链知识指南

跨链知识指南 什么是跨链 跨链就是能够让两个不同的链产生某种关联的技术&#xff0c;或者说能把链A的东西搬到链B&#xff0c;跨链是一个复杂的过程&#xff0c;需要链对链外的信息的获取与验证&#xff0c;需要节点有单独的验证能力等等 什么是跨链桥&#xff1f; 跨链桥…

凯美瑞 vs 太空船:Web3 游戏生长的两条路径

撰文&#xff1a;Teng Yan&#xff08;0xPrismatic&#xff09;&#xff0c;Delphi Digital 研究员 编译&#xff1a;TinTinLand 来源&#xff1a;https://0xprismatic.substack.com/p/my-short-web3-gaming-thesis 经常有人问我关于 Web3 游戏的看法&#xff0c;所以我想以这…

实时时钟和日历电路MS85163/MS85163M

主要特点 ◼ 基于 32.768kHz 晶振提供年、月、日、 周工作日、小时、分钟和秒 ◼ 具有世纪标记&#xff0c;可工作于 2000-2199 年 ◼ 工作电压&#xff1a; 1.8V-5.5V ◼ 低功耗 ◼ 最高频率达 400kHz 的 I 2 C 接口 ◼ 可编程的时钟输出 (32.768kHz, 1.024kHz…

springcloud二手交易平台系统源码

开发技术&#xff1a; 大等于jdk1.8&#xff0c;大于mysql5.5&#xff0c;idea&#xff08;eclipse&#xff09;&#xff0c;nodejs&#xff0c;vscode&#xff08;webstorm&#xff09; springcloud springboot mybatis vue elementui mysql 功能介绍&#xff1a; 用户端&…

JWFD开源工作流-随机函数发生器最新进展

使用WIN7 32位&#xff0c;JDK1.8平台&#xff0c;跑语法分析&#xff0c;实测结果如上图&#xff0c;比JDK1.6的每个函数计算速度快了不止100倍&#xff0c;升级为JDK1.8是正确的选择&#xff0c;这个模块是典型的变形函数计算单元&#xff0c;可以解决很多需要动态变形物理模…

【PyQt学习篇 · ⑪】:QPushButton和QCommandLinkButton的使用

文章目录 构造函数菜单设置扁平化默认处理右键菜单QCommandLinkButton的使用 构造函数 QPushButton的构造函数如下&#xff1a; """QPushButton(parent: Optional[QWidget] None)QPushButton(text: Optional[str], parent: Optional[QWidget] None)QPushButt…

hosts文件地址

Hosts是一个没有扩展名的系统文件&#xff0c;可以用记事本等工具打开&#xff0c;其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”&#xff0c;当用户在浏览器中输入一个需要登录的网址时&#xff0c;系统会首先自动从Hosts文件中寻找对应的IP地址&…

python教程:把多张图片,合并成一张图

D:\Wdpython\environment\Scripts\python.exe D:/Wdpython/爬虫/测试8.py 图片列表 10 [‘刘亦菲/刘亦菲_1.jpg’, ‘刘亦菲/刘亦菲_11.jpg’, ‘刘亦菲/刘亦菲_12.jpg’, ‘刘亦菲/刘亦菲_13.jpg’, ‘刘亦菲/刘亦菲_15.jpg’, ‘刘亦菲/刘亦菲_2.jpg’, ‘刘亦菲/刘亦菲_3.jp…

[sd_scripts]之fine_tune

https://github.com/kohya-ss/sd-scripts/blob/main/docs/fine_tune_README_ja.mdhttps://github.com/kohya-ss/sd-scripts/blob/main/docs/fine_tune_README_ja.md fine-tune微调是指使用图像和文本对来训练模型&#xff0c;不包括lora、textual inversion和hypernetwork。 …

鸿蒙原生应用开发-DevEco Studio超级终端模拟器的使用

一、了解超级终端模拟器支持的设备情况 该特性在DevEco Studio V2.1 Release及更高版本中支持。 目前超级终端模拟器支持“PhonePhone”、“PhoneTablet”和“PhoneTV”的设备组网方式&#xff0c;开发者可以使用该超级终端模拟器来调测具备跨设备特性的应用/服务&#xff0c;如…

【HarmonyOS】HarmonyOS备案获取公钥和指纹

【关键字】 HarmonyOS应用、鸿蒙应用、元服务、应用备案 HarmonyOS应用在华为云等平台进行应用备案时&#xff0c;平台需要提供用公钥和签名指纹的信息&#xff0c;Android可以直接通过keystore或jks签名文件进行签名信息获取&#xff0c;HarmonyOS签名方式与Android不同&…

Facebook广告被暂停是什么原因?广告账号被封怎么办?

许多做海外广告投放的小伙伴经常遇到一个难题&#xff0c;那就是投放的Facebook广告被拒或广告帐户被关闭赞停的经历&#xff0c;随之而来的更可能是广告账户被封&#xff0c;导致资金的损失。本文将从我自身经验&#xff0c;为大家分享&#xff0c;FB广告被暂停的原因有哪些&a…

EM@解三角形@正弦定理@余弦定理

文章目录 abstract解三角形基本原理不唯一性 正弦定理直角三角形中的情形推广锐角三角形钝角情形 小结:正弦定理 余弦定理直角三角形中的情形非直角情形小结:余弦定理公式的角余弦形式 abstract 解直角三角形问题正弦定理和余弦定理的推导 对于非直角情形,都是直角情形的推广同…

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

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

Elasticsearch 集群状态详解

cluster state 返回结果详解 GET /_cluster/statehttps://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-state.html详细信息如下&#xff1a; {"cluster_name": "business-log","cluster_uuid": "ArYy-qmCTbCQTDUI8o…

Postgresql 常用整理

文章目录 1. 查询1.1数据库表1.1.1 获取指定数据库表1.1.2 获取指定数据库表所有列名 1.2 别名1.2.1 子表指定别名1.2.2 查询结果指定别名 1.3 临时表1.3.1 定义临时表1.3.2 使用临时表 1.4 子表1.5 分组1.5.1 group by1.5.2 partition by 1.6 分组后合并指定列字段&#xff1a…

Web3.0的测试题

任务&#xff1a; 在前端开发一个查询UI&#xff0c;查询当前用户账户的ETH余额和指定ERC20合约中的余额 目标&#xff1a; UI框架指定使用 MUI (https://mui.com)需要查询到当前账户的ETH余额并展示在UI界面上需要输入ERC20合约地址后&#xff0c;查询到到当前账户在此ERC20…

【Hadoop】YARN容量调度器详解

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&am…

Chrony的基本原理

介绍 &#xff08;1&#xff09;Chrony是一个用于计算机系统时钟同步的程序。它使用网络时间协议NTP来与远程时间服务器通信&#xff0c;根据这些服务器提供的时间信息来调整系统时钟。Chrony具有高精度&#xff0c;可配置&#xff0c;易使用等特点。 &#xff08;2&#xff…

集成MCU的OTP-2.4G合封芯片XL2401D,收发一体 上手简单

芯岭技术的XL2401D是一颗2.4G合封芯片&#xff0c;收发一体。合封芯片可以很好的节省PCB面积和开发成本。一颗芯片可以做到之前两颗芯片才能做到的事情。XL2401D内含MCU为九齐NY8A054E。有九齐MCU开发经验的话开发起来非常容易上手。 XL2401D芯片是工作在2.400~2.483GHz世界通…
最新文章