[算法应用]dijkstra算法的应用

先看一眼原始dijkstra算法,参考自dijkstra算法C++实现_c++实现djikstra-CSDN博客

分为三步

  1. 找到当前最优的
  2. 把当前最优的,不参与后面的更新
  3. 逐个比较是否更新

dijkstra算法的应用

题目大概是要从图上找一条权值不减的路径,且要经过最多的点。

所以用 Dijsktra 更新的原则是,1到该点的经过的点更多,则更新。

使用优先队列自动排序,排序的原则是:

  1. 首先,如果这两个点的权值,a>b,那么在优先级里,a<b(解释:要选权值更小的点,因为权值更大的话,就不是不减了)
  2. 接着,如果两点权值相等,就让1到该点经过的点更多的那个点优先(解释:我们的目的就是找点最多的那条路)

附上大佬的代码

struct T {
	int fi, se;
	friend bool operator < (T x, T y) {
		if (a[x.se] == a[y.se]) {
			if (x.fi == y.fi) return x.se > y.se;
			else return x.fi < y.fi;
		}
		else return a[x.se] > a[y.se];
	}
};
void dijkstra() {
	priority_queue<T> que;
	que.push({1, 1}); d[1] = 1;
	while (que.size()) {
		T p = que.top(); que.pop();
		int u = p.se, w = p.fi;
		if (st[u]) continue;
		st[u] = true;
		for (auto v : e[u]) {
			if (a[v] < a[u]) continue;
			int nw = d[u] + (a[v] != a[u]);
			if (nw > d[v]) {
				d[v] = nw;
				que.push({d[v], v});
			}
		}
	}
	cout << d[n] << "\n";
}

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

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

相关文章

【普中开发板】基于51单片机的简易密码锁设计( proteus仿真+程序+设计报告+讲解视频)

基于51单片机的简易密码锁设计 1.主要功能&#xff1a;资料下载链接&#xff1a; 实物图&#xff1a;2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单 【普中】基于51单片机的简易密码锁设计 ( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus8.16(有低版本) 程…

数据结构——栈(Stack)

目录 1.栈的介绍 2.栈工程 2.1 栈的定义 2.1.1 单链表实现栈 2.1.2 数组实现栈 2.1.2.1 静态数组栈 2.1.2.2 动态数组栈 2.2 栈的函数接口 2.2.1 栈的初始化 2.2.2 栈的数据插入&#xff08;入栈&#xff09; 2.2.3 栈的数据删除&#xff08;出栈&#xff09; 2.2.…

Kafka_02_Producer详解

Kafka_02_Producer详解 ProducerProducerRecordSend&Close实现原理ProducerInterceptorSerializerPartitioner 事务 Producer Producer(生产者): 生产并发送消息到Broker(推送) Producer是多线程安全的(建议通过池化以提高性能)Producer实例后可发送多条消息(可对应多个P…

组合数据(Python实现)

一、主要目的&#xff1a; 1&#xff0e;熟悉组合数据的类型。 2&#xff0e;掌握列表、元组、字典、集合等组合数据的创建、访问方法。 3&#xff0e;掌握组合数据推导式的使用方法 4&#xff0e;熟悉组合数据的常见应用。 二、主要内容和结果展示&#xff1a; 1. 使用两…

OpenCV中实现图像旋转的方法

OpenCV中实现图像旋转的方法 函数&#xff1a;cv2.flip() 功能&#xff1a;水平或者垂直翻转 格式&#xff1a;dst cv2.flip(src,flipCode[,dst]) 参数说明&#xff1a; src&#xff1a;输入图像 dst&#xff1a;和原图像具有相同大小、类型的目标图像。 flipCode&#…

Python小细节之Gui图形化界面库的对比和选择(一分钟版)

引言 我想要把打包的python程序变得好看 交互起来变得简单 遂 图形化界面 然 相关的库有很多 所以 对比&#xff01; 开整 8个图形化界面库 在Python中&#xff0c;有多种图形用户界面&#xff08;GUI&#xff09;库可以用来创建丰富的图形化应用程序。以下是一些主要的图…

竞赛练一练 第23期:NOC大赛每日一练,python题目刷题第8天,包含答案解析

题目来自:NOC 大赛创客智慧编程赛项Python 复赛模拟题(二) NOC大赛创客智慧编程赛项Python 复赛模拟题(二) 第一题: 编写一个成绩评价系统,当输入语文、数学和英语三门课程成绩时,输出三门课程总成绩及其等级。 (1)程序提示用户输入三个数字,数字分别表示语文、数学、…

3.1 数据链路层概述

目录 3.1 数据链路层概述3.1.1 关于数据链路层什么是数据链路从协议栈看数据链路层数据链路层信道类型 3.1.2 三个基本问题封装成帧透明传输差错控制循环冗余检验CRC&#xff08;Cyclic Redundancy Check&#xff09;原理 3.1 数据链路层概述 3.1.1 关于数据链路层 什么是数据…

odoo17 | 模型视图继承

前言 Odoo的强大之处在于它的模块化。模块专门用于满足业务需求&#xff0c;但模块也可以彼此交互。这对于扩展现有模块的功能非常有用。例如&#xff0c;在我们的房地产场景中&#xff0c;我们希望在常规用户视图中直接显示销售人员的属性列表。 但是在讨论特定的Odoo模块继…

HackTheBox - Medium - Linux - UpDown

UpDown UpDown 是一台中等难度的 Linux 机器&#xff0c;暴露了 SSH 和 Apache 服务器。在Apache服务器上&#xff0c;有一个Web应用程序&#xff0c;允许用户检查网页是否已启动。服务器上标识了一个名为“.git”的目录&#xff0c;可以下载以显示目标上运行的“dev”子域的源…

GA算法简介

GA算法简介 前言一、GA是什么二、GA简介1.思想2.流程3.过程 前言 今天学习一下优化中非常出名的遗传(GA)算法 &#xff0c;它的起源可是来自达尔文的生物进化论。 一、GA是什么 百科定义&#xff1a;遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是…

Java多线程技术11——ThreadPoolExecutor类的使用1-备份

1 概述 ThreadPoolExecutor类可以非常方便的创建线程池对象&#xff0c;而不需要程序员设计大量的new实例化Thread相关的代码。 2 队列LinkedBlockingQueue的使用 public class Test1 {public static void main(String[] args) {LinkedBlockingQueue queue new LinkedBlocki…

四则运算 C语言xdoj20

问题描述&#xff1a; 输入两个整数和一个四则运算符&#xff0c;根据运算符计算并输出其运算结果&#xff08;和、差、积、商、余之一&#xff09;。注意做整除及求余运算时&#xff0c;除数不能为零。 输入说明&#xff1a; 使用scanf()函数输入两个整数和一个运算符&#xf…

【好书推荐】深入理解现代JavaScript

目录 推荐理由内容简介本书阅读对象为什么推荐这本书&#xff0c;看大佬们怎么说总结 T. J. Crowder是一位拥有30年经验的软件工程师。在他的整个职业生涯中&#xff0c;他至少有一半时间是在使用JavaScript从事开发工作。他经营着软件承包和产品公司Farsight Software。他经常…

工业协议转换网关:打破通信壁垒,实现设备互联

在工业自动化领域&#xff0c;各种设备和系统间的通信协议不尽相同&#xff0c;这给不同设备间的集成和数据交互带来了挑战。工业协议转换网关作为一种解决这一问题的关键设备&#xff0c;能够实现不同协议间的转换和数据传输&#xff0c;打破通信壁垒&#xff0c;提高设备的协…

2.8 EXERCISES

如果我们想使用每个线程来计算向量加法的一个输出元素&#xff0c;那么将线程/块索引映射到数据索引的表达式是什么&#xff1f; 答&#xff1a;C 假设我们想用每个线程来计算向量加法的两个&#xff08;相邻&#xff09;元素。将线程/块索引映射到i&#xff08;由线程处理的…

SpringSecurity集成JWT实现后端认证授权保姆级教程-数据准备篇

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法 &#x1f492; 公众号&#xff1a;知识浅谈 &#x1f525;网站…

进阶学习——Linux系统安全及应用

目录 一、系统安全加固 1.账号安全基本措施 1.1系统账号清理 1.1.1延伸 1.2密码安全控制 1.3命令历史限制 1.4终端自动注销 二、使用su命令切换用户 1.用途及用法 2.密码验证 3.限制使用su命令的用户 4.查看su操作记录 5.sudo&#xff08;superuse do&#xff09;…

Linux下QT生成的(.o)、(.a)、(.so)、(.so.1)、(.so.1.0)、(.so.1.0.0)之间的区别

记录一下遇到的问题&#xff1a;Linux系统下Qt编译第三方动态库会生成多个.so文件&#xff0c;不了解的小伙伴可能很疑惑&#xff1a; &#xff08;1&#xff09;Linux 下 QT 生成的&#xff08;.o&#xff09;、&#xff08;.a&#xff09;和&#xff08;.so&#xff09;三个文…

如何向嵌入式设备中添加tcpdump工具

说明&#xff1a;tcpdump是一个在网络设备调试中一个非常重要的工具&#xff0c;它并不像hexdump等工具集成在busybox里面&#xff0c;也不像其他的软件一样只需要依赖linux标准的库就可以实现&#xff0c;它需要pcap相关的库和加密的相关库。 本文主要是基于realtek 83系列的…