洛谷 1576 最小花费 (最短路)

【C++】洛谷|P1576 最小花费 题目描述:在n个人中,某些银行账号可以互相转账,每次转账需要扣除z%的手续费。要求计算A最少需要多少钱转账,才能使B最终收到100元。 算法思路:将问题转化为最短路径问题,以B为起点反向计算,使用Dijkstra算法求到A的最小初始金额路径。边权表示转账后的到账比例(1-z%),通过不断松弛操作更新各节点到B的最小初始金额。 实现要点: 构建邻接矩阵存储转账手续费 反向计算从B出发到各节点的最小初始金额 Dijkstra算法过程中比较路径乘积来更新最小值 最终输出A节点到B的最小初始金额,保留8位小数 时间 阅读详情

http://www.luogu.org/problem/show?pid=1576
把每次扣除的百分数z换成1-z%的样子作边权,即每次要乘的数值,找个乘积最长路最后用100除这个最长路即可。Dijkstra和SPFA应该都可以,然而我只会打SPFA。。。还要注意是双向边。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=2010;
int head[maxn*maxn],k=1,n,m,a,b;
double dis[maxn];
bool vis[maxn];
queue<int> q;
struct edge{
    int v,next;
    double w;
}e[maxn*maxn];
void addedge(int u,int v,double w){e[k].v=v;e[k].w=w;e[k].next=head[u];head[u]=k++;}
double spfa(int s)
{
	memset(vis,0,sizeof(vis));
	memset(dis,0,sizeof(dis));
	queue<int> q;
	dis[s]=1;
	vis[s]=1;
	q.push(s);
	while(!q.empty()) 
	{
		int t=q.front();
		q.pop();
		vis[t]=0;
		for(int i=head[t];i;i=e[i].next)
		{
			int v=e[i].v;
			if(dis[v]<dis[t]*e[i].w)
			{
				dis[v]=dis[t]*e[i].w;
				if(!vis[v])
				{
					vis[v]=1;
					q.push(v);
				}
			}
		}
	} 
	return 100/dis[b];
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		addedge(x,y,1-1.0*z/100);
		addedge(y,x,1-1.0*z/100);
	}
	scanf("%d%d",&a,&b);
	printf("%.8lf",spfa(a)*1.0);
	return 0;
} 
最小花费 c++详解 在 n 个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问 A 最少需要多少钱使得转账后 B 收到 100 元。 阅读详情

相关推荐

零代码进行单细胞数据全流程分析教程

我开发的本地电脑无限使用无限分析作图的生信零代码一键分析电脑软件神器OmicsTools 软件在github上的zihaoxingstudy1/OmicsTools仓库 中,大家可以下载安装OmicsTools进行各种生信分析和可视化作图。

qq_40073899的博客 3618

洛谷题单 Part 8.2 最短路问题

算法竞赛中的最短路算法

Dawn的博客 584

Sony微单相机alpha6000 wifi远程控制(1)

引言 Sony’s Camera Remote API beta SDK allows you to control a number of Sony cameras, including Sony Action cams, Sony Alpha cameras and Lens Style cameras, wirelessly from another device. 索尼于2017年三月Re...

markfuk996的博客 4964

最小花费 (Dijkstra算法)

最小花费 题目 在nnn个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问AAA最少需要多少钱使得转账后BBB收到100元。 输入 第一行输入两个用空格隔开的正整数nnn和mmm,分别表示总人数和可以互相转账的人的对数。以下m行每行输入三个用空格隔开的正整数 xxx , yyy , zzz,表示标号为x的人和标...

Y的博客 2111

常用的集成TTL门电路

本篇主要分析了常用的逻辑门电路与非门,详细分析了电源原理。值得收藏。

ManagerUser的博客 5086

随机变量序列 收敛 检验 matlab,利用MATLAB验证样条插值的收敛性

问题提出多项式插值是不收敛的,即插值的节点多,效果不一定就好。对样条函数插值又如何呢?理论上证明样条插值的收敛性是比较困难的,但通过本实验可以验证这一理论结果。.实验内容请按一定的规则分别选择等距或者非等距的插值节点,并不断增加插值节点的个数。考虑实验2.1中的函数或选择其他你有兴趣的函数。(中函数)。实验要求(1)随节点个数增加,比较被逼近函数和样条插值函数误差的变化情况。分析所得结果并与拉格朗...

weixin_30895121的博客 4734

洛谷p2176[最短路]

https://www.luogu.org/problemnew/show/P2176 题意:n个点,m条路,如果使某条道路长度翻倍,求此时最短路与未改变前的最短路的差的最大值。 思路:先求一边最短路,并记录路径。然后回溯路径,改变这条最短路的路径上的道路长度,计算并比较出最大的差值。 之所以只改变最短路上的值,是因为哪怕改变了别的道路的长度,最短路的值不会改变,是无效的改变。 代码待优化 #in...

CSL201816080304的博客 300

一文详解声码器

声码器(Vocoder)是语音信号处理领域的核心技术,其本质是通过“分析 - 参数化 - 合成” 的闭环流程,实现语音的高效编码、转换或生成。它不仅是早期语音通信的关键工具,更是现代 AI 语音技术(如 TTS、语音转换)的核心组件。以下从原理、技术分类、关键模块、应用及发展趋势展开详细解析。

weixin_41413777的博客 1351

SYZOJ - 最小花费(最短路)

题目链接:https://syzoj.com/problem/290 内存限制:128 MiB 时间限制:1000 ms 题目描述 在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。 输入格式 第一行输入两个正整数n,m,分别表示总人数和可以互相转账的人的对数...

ityanger的技术栈 3050

AI 模型训练核心方法论:零基础也能落地的 8 个关键阶段

本文是为 AI 零基础学习者打造的模型训练入门指南,以生活化语言拆解核心概念,规避专业术语壁垒。内容先通俗阐释模型训练、监督学习、数据集划分等基础概念,再按问题定义、数据准备、模型选择、环境搭建、训练、评估、调参、部署 8 个阶段,拆解完整训练流程,搭配 PyTorch 代码示例与实战案例,同时提供资源预算、常见问题解决方案及学习路径。指南强调数据的核心重要性,推荐新手优先使用迁移学习和免费 GPU 资源,兼顾理论与实操,帮助学习者快速上手,避开训练误区,独立完成从模型搭建到部署的全流程。

weixin_52741870的博客 468

SAP ABAP OData 的四种开发方式

摘要:SAP开发中CDS视图转OData服务的四种方案演进:1)7.40+版本需手动映射数据源;2)7.50+可直接引用CDS视图自动生成服务;3)7.50+通过@OData.publish注解声明式发布;4)7.54+采用服务定义与绑定实现协议解耦。新版本推荐使用最新方案,旧系统可选传统方式,整体呈现开发简化、架构解耦的技术演进趋势。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 861

洛谷P1576 最小花费——单源最短路变种

题目:https://www.luogu.org/problemnew/show/P1576 或者http://111.231.101.32/problem.php?id=1002(自建OJ,欢迎光临) 分析: 结点最多2000个,所以,不可能用floyed,否则超时,采用dijkstra算法,时间复杂度O(n^2)。 本题是求源点s到终点e的最大转账率,所以初始化定义dis[1..n]=...

qq_36314344的博客 325

CMOS图像传感器——Remosaic技术

对remosaic技术进行了介绍

沧海一升的博客 9581

【洛谷】P1576 最小花费(最短路--->最长路(通过改边权变定义))

最短路--->最长路(通过改边权变定义)

m0_74969835的博客 490

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

洛谷P1576||最小花费||dijkstra||双向建边!!

题目描述 在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。 数据范围 1<=n<=2000,m<=100000 思路分析 可以把每个人看成是一个点,那么题目描述的问题就是使得A->B的花费最少,即两...

weixin_30640291的博客 174

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

洛谷 P1576 最小花费

个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问。,分别表示总人数和可以互相转账的人的对数。元最少需要的总费用。之间最少的手续费比率是多少。最少需要多少钱使得转账后。的人之间互相转账需要扣除。之间可以直接或间接地转账。行每行输入三个正整数。最后一行输入两个正整数。第一行输入两个正整数。

2301_78981471的博客 1098

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

P1576 最小花费 【洛谷算法习题】

摘要: 题目要求在转账网络中,计算从A账户转账到B账户的最小初始金额,确保B最终收到100元。将手续费转换为保留比例后,问题转化为求A到B路径上保留比例乘积的最大值,即单源最长路径问题。采用改进的Dijkstra算法,通过贪心策略选择当前最大比例节点松弛邻接点,最终结果为100除以最大保留比例。时间复杂度O(n²),适用于n≤2000的数据规模。示例输入输出验证了算法的正确性,结果需精确到小数点后8位。

Pretty Boy Fox的博客 398

【洛谷 1576】 最小花费

题目描述 在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。 输入输出格式 输入格式: 第一行输入两个正整数n,m,分别表示总人数和可以互相转账的人的对数。 以下m行每行输入三个正整数x,y,z,表示标号为x的人和标号为y的人之间互相转账需要...

weixin_30292745的博客 121

洛谷P1576 最小花费

洛谷P1576最小花费题解

linmeng1024的博客 565

【洛谷 1576】最小花费

题目描述 在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。 输入输出格式 输入格式: 第一行输入两个正整数n,m,分别表示总人数和可以互相转账的人的对数。 以下m行每行输入三个正整数x,y,z,表示标号为x的人和标号为y的人之间互相转账需要扣除z%的...

weixin_30735745的博客 105

【洛谷】P1576 最小花费

块钱最多能转为多少钱,则问题变为最短路问题(可以对每条边取对数再取反。当然代码里不需要这么写)。根据数据范围,可以用朴素Dijkstra来做。个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问。,分别表示总人数和可以互相转账的人的对数。元最少需要的总费用。之间可以直接或间接地转账。最少需要多少钱使得转账后。的人之间互相转账需要扣除。最后一行输入两个正整数。第一行输入两个正整数。行每行输入三个正整数。

数学、算法爱好者的博客 674

最短路问题从入门到拓展题目推荐及心得经验整理

本文总结了图论中最短路问题简单题目的学习心得,重点介绍了Dijkstra算法的应用与变形。

German_Sparrow的博客 901

最短路— dijkstra 松弛操作变形

之前用二分并查集和最小生成树写过,现在学习了dijkstra的解法。 。只需要将原算法的松弛操作修改为求最大边的最小值即可。此时dis[i]数组表示起点s到i的最大边的最小值 #include<bits/stdc++.h> using namespace std; #define ll long long //#define int ll #define mm(a) memset(a,0,sizeof(a)) #pragma warning (disable :4996); const..

m0_60777643的博客 306
上一篇: USACO 母亲的牛奶 Mother's Milk (DFS)
下一篇: hihocoder #1042 跑马圈地
sdxtcqs
博客等级 码龄11年 8粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值