【数据结构】E : 货币套汇(图路径)
E : 货币套汇(图路径)
Description
套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币。例如,假定1 美元可以买0.7 英镑,1 英镑可以买9.5 法郎,1法郎可以买到0.16美元。通过货币兑换,一个商人可以从1 美元开始买入,得到0.7×9.5×0.16=1.064美元,从而获得6.4%的利润。 给定n种货币c1 ,c2 ,… ,cn的有关兑换率,试设计一个有效算法,确定货币间是否存在套汇的可能性。
提示:判断图上是否出现正环,即环上所有的边相乘大于1
Input
第一行:测试数据组数
每组测试数据格式为:
第一行:正整数n (1< =n< =30),正整数m,分别表示n种货币和m种不同的货币兑换率。
2~n+1行,n种货币的名称。
n+2~n+m+1行,每行有3 个数据项ci,rij 和cj ,表示货币ci 和cj的兑换率为 rij。
Output
对每组测试数据,如果存在套汇的可能则输出YES
如果不存在套汇的可能,则输出NO。
Sample
Input
2
3 3
USDollar
BritishPound
FrenchFranc
USDollar 0.5 BritishPound
BritishPound 10.0 FrenchFranc
FrenchFranc 0.21 USDollar
3 6
USDollar
BritishPound
FrenchFranc
USDollar 0.5 BritishPound
USDollar 4.9 FrenchFranc
BritishPound 10.0 FrenchFranc
BritishPound 1.99 USDollar
FrenchFranc 0.09 BritishPound
FrenchFranc 0.19 USDollar
Output
YES
NO
解题思路
这一道题就是在一个加权有向图中检测是否存在正权重环,这里的关键是如何利用图论和弗洛伊德算法来解决这个问题。为什么能够使用Folyd算法呢?这就要考虑到Folyd算法的作用,**弗洛伊德算法能够计算图中所有顶点对之间的最短路径。在这个问题中,我们将算法用于计算“最优”兑换路径,即使得货币数量最大化的路径。**所以同样是求最优的,用于正权重环同样可以适用。这一道题的注意点就是:**不能互相兑换的货币的处理和自环的预处理。
AC代码
#include <iostream>
#include <string>
using namespace std;const double EPS = 1e-7; // 表示非常小的数,用于初始化没有直接兑换率的情况
int n, m;int getIndex(string arr, string message[]) {for (int i = 0; i < n; i++)if (message[i] == arr)return i;
}void Folyd(double** data) {double** dist = new double* [n];for (int i = 0; i < n; i++) {dist[i] = new double[n];for (int j = 0; j < n; j++) {if (i == j)dist[i][j] = 1.0; // 自环设置为1elsedist[i][j] = data[i][j] > EPS ? data[i][j] : EPS;}}for (int k = 0; k < n; k++)for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)if (dist[i][j] < dist[i][k] * dist[k][j])dist[i][j] = dist[i][k] * dist[k][j];for (int i = 0; i < n; i++) {if (dist[i][i] > 1.0) {cout << "YES" << endl;// 释放内存for (int i = 0; i < n; i++) {delete[] dist[i];}delete[] dist;return;}}cout << "NO" << endl;// 释放内存for (int i = 0; i < n; i++) {delete[] dist[i];}delete[] dist;
}int main() {string message[40];int t;cin >> t;while (t--) {cin >> n >> m;for (int i = 0; i < n; i++)cin >> message[i];double** data = new double* [n];for (int i = 0; i < n; i++) {data[i] = new double[n];for (int j = 0; j < n; j++)data[i][j] = (i == j) ? 1.0 : EPS;}for (int i = 0; i < m; i++) {string a, c;double b;cin >> a >> b >> c;data[getIndex(a, message)][getIndex(c, message)] = b;}Folyd(data);// 释放内存for (int i = 0; i < n; i++) {delete[] data[i];}delete[] data;}return 0;
}
相关文章:
【数据结构】E : 货币套汇(图路径)
E : 货币套汇(图路径) Description 套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币。例如,假定1 美元可以买0.7 英镑,1 英镑可以买9.5 法郎,1法郎可以买到0.16美元。通过货币兑换&a…...
图书管理系统源码,图书管理系统开发,图书借阅系统源码SqlHelper数据库访问操作方法简述
SqlHelper 是封装了数据库操作方法的类库,使用它我们可以链接数据库操作数据库表数据增删改查,其中主要SqlConnection ,ExecuteNonQuery,ExecuteScalar,ExecuteDataTable四个主要方法SqlConnection负责根据访问配置文件web.config中connstr链接数据库字符串去打开数据库,…...
富文本编辑器的实现与回显
文本编辑器实现-wangeditor 写之前记得安装wangeditor插件,到时候报错别赖我 import “wangeditor/editor/dist/css/style.css”; import { Editor, Toolbar } from “wangeditor/editor-for-vue”; defineOptions({name: "BaseEditor" });const mode …...
探索亚马逊云科技云存储服务的性能
文章作者:Libai 引言 随着企业越来越多地依赖云存储解决方案,确保存储性能的最佳状态变得至关重要。在本文中,我们将探讨在亚马逊云科技云存储服务上进行存储性能基准测试的重要性,以及如何帮助企业做出资源分配和优化的明智决策…...
初出茅庐的小李博客之C语言必备知识共用体
C语言必备知识共用体 共用体是一种构造数据类型,有时候也称之为联合体。 它的用途: 使几个不同类型的变量共占一段内存。 共用体举例 union 共用体名 { 类型标识符 成员名;类型标识符 成员名; };union data //共用体名字是data{ int i; …...
vue3+elementPlus之侧边菜单栏功能
选择默认的颜色,将代码拷贝至<el-aside>模块中 稍微把不需要的修改一下。 <template><div class"common-layout"><el-container><el-header class"homeHeader"><div class"headerTitle">Devops…...
阿里云服务器安装mysql数据库之后无法远程连接
目录 一、mysql安装完成后直接远程远程连接阿里云服务器上的MySQL会报下述错误: 1、修改root用户的host 为% 登录MySQL 后 执行 2、修改完成后执行 3、退出mysql 重启mysql服务 exit; 4、修改完成后需要设置阿里云的安全规则。 二、dbaver测试链…...
如何把自己银行卡里的钱转账充值到自己支付宝上?
原文来源:https://www.caochai.com/article-4524.html 支付宝余额是支付宝核心功能之一,主要用于网购支付、线下支付、转账等场景。用户可以将银行卡、余额宝等资金转入或转出至支付宝余额,实现快速转账和支付。 如何把自己银行卡里的钱转账…...
Flink Flink中的分流
一、什么是分流 所谓“分流”,就是将一条数据流拆分成完全独立的两条、甚至多条流。也就是基于一个DataStream,定义一些筛选条件,将符合条件的数据拣选出来放到对应的流里。 二、基于filter算子的简单实现分流 其实根据条件筛选数据的需求…...
传输层协议[精选]
网络: 跨主机通信. 互联网通信: 两点之间的通信路径有无数条. 集线器: 把一根网线差出来两根,但是同一时刻只能有一根线跑.交换机: 组建局域网.路由器: 本质就是将两个局域网连接起来 交换机和路由器之间的区别越来越模糊. 调制解调器: 使用电话线上网的时候,需要将电话线的模…...
LeetCode算法题解|474. 一和零
474. 一和零 题目链接:474. 一和零 题目描述 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子…...
一种太阳能风能市电互补路灯方案介绍
太阳能市电互补路灯是一种环保、节能的照明设施,它利用太阳能进行发电并实现照明。这种路灯在白天吸收阳光并将其转化为电能,到了晚上则利用储存的电能为LED灯提供电力,实现照明功能。下面叁仟智慧将详细介绍太阳能市电互补路灯灯的工作原理和…...
世微 dc-dc降压恒流 LED汽车大灯 单灯 14V5A 68W车灯驱动方案 AP5191
产品描述 AP5191是一款PWM工作模式,高效率、外围简单、外置功率MOS管,适用于4.5-150V输入的高精度降压LED恒流驱动芯片。输出最大功率150W,最大电流6A。AP5191可实现线性调光和PWM调光,线性调光脚有效电压范围0.55-2.6V.AP5191 工作频率可以…...
基于时隙的多重冗余流指纹模型
文章信息 论文题目:基于时隙的多重冗余流指纹模型 期刊(会议):网络与信息安全学报 时间:2023 级别:CCF C 概述 为确保内生网络流量安全可信,本文在研究流水印及其扩展的流指纹机制的基础上&a…...
Visual Studio 2019 C# System.BadImageFormatException 解决方法
文章目录 1.DLL文件缺失或不匹配原因解决方法 2.系统环境变量Path下内容过多原因解决方法 3.位数错误原因解决方法 分析几种可能因素 1.DLL文件缺失或不匹配 原因 检查对应Debug路径下的DLL文件是否有缺失 解决方法 将对应的DLL文件放到Debug文件夹里面,检查冗余…...
深度学习之基于YoloV5车辆和行人目标检测系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介YOLOv5 简介YOLOv5 特点 车辆和行人目标检测系统 二、功能三、系统四. 总结 一项目简介 # 深度学习之基于 YOLOv5 车辆和行人目标检测系统介绍 深度学习在…...
Django框架之中间件
目录 一、引入 二、Django中间件介绍 【1】什么是Django中间件 【2】Django中间件的作用 【3】示例 三、Django请求生命周期流程图 四、Django中间件是Django的门户 五、Django中间件详解 六、中间件必须要掌握的两个方法 (1) process_request (2) process_respon…...
BTC 复兴:Ordinals 带来创新活力,BitVM 与 BitStream 相继问世
除了备受瞩目的 ETF,今年 Bitcoin 生态迎来全新的发展活力和机遇。Ordinals 协议的横空出世,以此为基础诞生的 BRC20 协议给整个比特币生态带去了一波新的能量,迎来铭文热度高涨。而诸如 BitVM、BitStream 等新技术甫一问世,便引发…...
STM32 CAN协议讲解以及代码
STM32 CAN 文章目录 STM32 CAN前言一、CAN外设1.主控制寄存器CAN_MCR2.位时序寄存器CAN_BTR3.CAN的发送邮箱4.CAN的接收FIFO5.验收筛选器 二、代码配置1.初始化2.发送数据3.接收数据4.main.c 前言 前面学习了CAN的一些理论知识,他在我们的STM32里面是怎么用的呢 前…...
京东数据分析(京东大数据):2023年10月京东手机行业品牌销售排行榜
鲸参谋监测的京东平台10月份手机市场销售数据已出炉! 根据鲸参谋平台的数据显示,今年10月份,京东平台手机行业的销量约340万,环比增长约11%,同比则下滑约2%;销售额为108亿,环比增长约17%&#x…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
