最小花费-银行转账-图的最短路-超详细解析注释

news2025/5/14 9:10:36

最小花费-银行转账-图的最短路-超详细解析注释

【题目描述】
在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。

【输入】
第一行输入两个正整数n,m,分别表示总人数和可以互相转账的人的对数。

以下m行每行输入三个正整数x,y,z,表示标号为x的人和标号为y的人之间互相转账需要扣除z%的手续费 (z<100)。

最后一行输入两个正整数A,B。数据保证A与B之间可以直接或间接地转账。

【输出】
输出A使得B到账100元最少需要的总费用。精确到小数点后8位。

【输入样例】
3 3
1 2 1
2 3 2
1 3 3
1 3

【输出样例】
103.07153164

【数据规模】

1<=n<=2000
在这里插入图片描述

//【参考代码】

#include <iostream>
#include <cstdio>
using namespace std;

const int N = 2000;
double map[N][N];//i点到j点的最小损耗 无向图
double dis[N];//从a点出发到各点的最小损耗
double book[N];//确定最小损耗
int n, m;// 总人数  相互转账人的对数

int main()
{
    cin>>n>>m;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
        {
            map[i][j] = 10000;//初始值设置的尽可能大
        }
    }
    for(int i=1; i<=n; i++)
    {
        map[i][i] = 0;
    }

    //构建图
    for(int i=1; i<=m; i++)
    {
        int x,y,z;
        cin>>x>>y>>z;
        map[x][y] = z*1.0/100;//百分比除以100
        map[y][x] = map[x][y];//无向图
    }

    int a, b; //a起点  b终点
    cin>>a>>b;
    //int s = a;
    for(int i=1; i<=n; i++)
    {
        dis[i] = map[a][i];//把a点出发的值赋值到一维数组
    }
    book[a] = true;//已经使用过
    
    //迪杰斯特拉算法
    for(int i=1;i<n; i++)
    {
        int k = a;
        double minv = 10000;//求最小值设置较大初始值
        for(int j=1; j<=n; j++)
        {
            if(dis[j]<minv && book[j]==false)
            {
                minv = dis[j];//确定最小值
                k = j;//最小值对应的下标
            }
        }
        book[k] = true;//用过直接设置true
        for(int j=1; j<=n; j++)
        {
            if(book[j]==false)
            {
                dis[j] = min(dis[j],dis[k]+(1-dis[k])*map[k][j]);
            }
        }
    }
    printf("%.8lf",100/(1-dis[b]));//保留8位小数
    return 0;
}


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

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

相关文章

【Linux】Ubuntu 解压 zip、z01、z02等压缩文件的方法,Linux如何解压分卷压缩的

zip分卷压缩&#xff0c;在windows上压缩来的&#xff0c;如何解压这种文件&#xff1a; -rw-rw-r-- 1 20401094656 Dec 10 20:06 FFHQ.z01 -rw-rw-r-- 1 20401094656 Dec 10 20:10 FFHQ.z02 -rw-rw-r-- 1 20401094656 Dec 10 23:22 FFHQ.z03 -rw-rw-r-- 1 20401094656 Dec 10…

机器人跟踪性能量化指标

衡量机械臂关节轨迹跟踪控制的性能可以通过以下几个方面来进行&#xff1a; 跟踪精度&#xff1a;这是衡量机械臂关节轨迹跟踪控制性能的最重要的指标。它反映了机械臂实际运动轨迹与期望运动轨迹之间的偏差。跟踪精度越高&#xff0c;说明机械臂的控制性能越好。运动范围&…

设计模式——1_2 组合(Composite)

君子和而不同&#xff0c;小人同而不和 ——《论语》 文章目录 定义图纸一个例子&#xff1a;折算产品的成本BomMessageBomTree 写在后面的碎碎念职责分离非树状的组合模式组合和迭代器姑妄言之 定义 将对象组合成树状结构以表示“部分-整体”的层次结构。组合模式使得用户对单…

Python数据结构——字符串

目录 一、字符串的不变性 二、字符串的常见方法介绍 三、字符串对象的join()和split()方法 一、字符串的不变性 1、属于不可变对象&#xff0c;不能通过索引操作来改变字符串对象本身 s I like Python s[7] p 要修改字符串&#xff0c;需要使用字符串的replace()方法&am…

Python基础知识:整理16 使用pyecharts实现动态柱状图

1 基础柱状图的构建 from pyecharts.charts import Barbar Bar()bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]) bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90]) bar.ad…

一个用于批量给图片增加水印的Python库

本文推荐一个开源免费Python脚本&#xff0c;可以在指定目录及其子目录中批量给图像添加水印&#xff0c;当然&#xff0c;你也可以集成到你的Web应用中。 给图片、视频增加水印以确认版权或者增加效果&#xff0c;是在媒体内容信息经常需要用到的技术。本文推荐一个开源免费P…

Redis集群(主从复制)

主从复制&#xff1a;是指将一台 Redis 服务器的数据&#xff0c;复制到其他的 Redis 服务器。 前者称为主节点(master)&#xff0c;后者称为从节点(slave),数据的复制是单向的&#xff0c;只能 由主节点到从节点。 可以实现数据备份。即使当其中一台机器宕机其他机器还可以正…

如何运用AR技术提升制造效率?这里有答案!

当谈及AR技术在工业领域的应用&#xff0c;首先让人想到的是它为企业带来的巨大变革。从工业设计和制造到设备维护和维修&#xff0c;再到培训和技能传承以及设备操作和监测&#xff0c;AR技术凭借其独特的方式&#xff0c;帮助企业实现更高效的生产和运营。通过这些环节的优化…

office办公技能|word中的常见通配符使用

一、删除Word中含有指定内容的整行 操作方法&#xff1a; 1、快捷键 CtrlH&#xff0c;打开Word的查找替换窗口&#xff0c;单击【更多】按钮&#xff0c;勾选“使用通配符”。 2、在查找内容处&#xff0c;输入“替换内容*^13”&#xff0c;替换为处什么都不填。 3、单击【…

MySQL系列之数据导入导出

前言 大数据与云计算作为当今时代&#xff0c;数据要素发展的“动力引擎”&#xff0c;已经走进了社会生活的方方方面。而背后承载的云服务或数据服务的高效运转&#xff0c;起了决定作用。 作为数据存储的重要工具&#xff0c;数据库的品类和特性也日新月异。从树型、网络型…

第380场周赛挑战:二分,数位dp和KMP算法的综合运用

比赛地址 卡在第三题了&#xff0c;应该看看第4题kmp套模版的 一、最大频率元素计数 class Solution:def maxFrequencyElements(self, nums: List[int]) -> int:frequency {} # 哈希表用于统计频率max_freq 0 # 存储最大频率# 统计每个元素的频率for num in nums:i…

机器学习周报第28周

目录 摘要Abstract一、文献阅读1.题目&#xff1a;2.摘要3.问题描述4.过去方案5.论文方案6.论文模型7.相关代码 摘要 本周阅读了一篇混沌时间序列预测的论文&#xff0c;论文模型主要使用的是时间卷积网络&#xff08;Temporal Convolutional Network&#xff0c;TCN&#xff…

1.3K Star,让发送短信变的更简单

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;我的公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值。 前言 在日常的开发过程中&#xff0c;短信的发送经常使用&#xff08;尤其是中小型的外…

Java智能导诊系统 (3D人体导医)源码

智能导诊是一种利用人工智能技术来帮助患者进行自助问询及挂号服务的系统。通过智能导诊系统&#xff0c;患者可以输入自身疾病的症状表现&#xff0c;或选择身体部位&#xff0c;在系统的多维度计算下&#xff0c;系统会根据患者提供的信息精准推荐科室&#xff0c;并引导患者…

数据库备份脚本嘎嘎香,被秀到了!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

c++qt-基本组件

1. Designer 设计师&#xff08;掌握&#xff09; Qt包含了一个Designer程序&#xff0c;用于通过可视化界面设计开发界面&#xff0c;保存的文件格式为.ui&#xff08;界面文件&#xff09;。界面文件内部使用xml语法的标签式语言。 在Qt Creator中创建项目时&#xff0c;选中…

r语言拟合曲线

r语言拟合曲线 #圆滑曲线 library(ggalt) library(ggplot2) df <- read.csv("lqs-1.csv",headerT) p2<-ggplot(datadf,aes(xx,yy))geom_point(size1) geom_smooth(span0.1)p2结果

Error: L6218E: Undefined symbol 系列错误汇总 (referred from main.o)

传送门 错误1&#xff1a; Undefined symbol(referred from main.o)错误2&#xff1a;Undefined_symbol _use_two_region memory 错误1&#xff1a; Undefined symbol(referred from main.o) Cube_GPIO\Cube_GPIO.axf: Error: L6218E: Undefined symbol LED_GPIO_Init (referr…

OpenCV4.x(C++)人脸检测(眼睛、侧脸、正脸)

一、前言 OpenCV是一款广泛使用的计算机视觉库&#xff0c;提供了许多强大的功能&#xff0c;包括人脸检测和识别。人脸分类器是OpenCV中用于人脸检测的关键工具之一&#xff0c;能够快速准确地检测出图像中的人脸。 本文将介绍如何使用OpenCV自带的人脸分类器&#xff0c;并…