基础最短路五 POJ1860

解题报告:【kuangbin带你飞】专题四 最短路练习题 最短路合集 阅读详情

 

POJ 1860:http://poj.org/problem?id=1860

n,m皆为100

题目大意: n种钱币,m个钱币交换点。每个交换点支持交换两种货币。 交换之前收取手续费,然后乘以倍数rate交换钱币给你。

                    给你初始的币种以及钱数,问你能不能通过交换点把钱越变越多?

 

                   这一下子就是Spfa嘛,壮我Spfa算法。 出现了无限增大环就输出Yes就好了。

开心的使用Spfa:

 

#include"cstdio"
#include"iostream"
#include"cstring"
#include"algorithm"
#include"vector"
#include"cmath"
#include"queue"
using namespace std;
#define INF 9999999
#define inf 109
#define loop(x,y,z) for(x=y;x<z;x++)
#define ll long long

double dis[inf];
int cnt[inf];
int n,m,s;
double v;
int book[inf];
queue<int>q;
struct node
{
    int to;
    double fee;
    double rate;
    node(int i,double j,double k)
    {
        to=i;
        rate=j;
        fee=k;
    }
};
vector<node>edge[inf];      //每个货币 对应的换币方法

void init()
{
    int i;
    loop(i,1,n+1)edge[i].clear();
    loop(i,1,n+1)dis[i]=-1;
    memset(book,0,sizeof book);
    memset(cnt,0,sizeof cnt);
    while(!q.empty())q.pop();
}

bool spfa()
{
    q.push(s);
    book[s]=1;
    dis[s]=v;
    int i;
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        book[u]=0;
        int len=edge[u].size();
        loop(i,0,len)
        {
            node& e=edge[u][i];
            if(dis[e.to]<(dis[u]-e.fee)*e.rate)
            {
                dis[e.to]=(dis[u]-e.fee)*e.rate;
                if(!book[e.to])
                {
                    q.push(e.to);
                    book[e.to]=1;
                    if(++cnt[e.to]>n)return false;
                }
            }

        }
    }
    return true;
}

int main()
{
    int i,j,k;
    double a,b,c,d;
    scanf("%d%d%d%lf",&n,&m,&s,&v);
    init();
    while(m--)
    {
        scanf("%d%d%lf%lf%lf%lf",&i,&j,&a,&b,&c,&d);
        edge[i].push_back(node(j,a,b));
        edge[j].push_back(node(i,c,d));
    }
    if(spfa())printf("NO\n");
    else printf("YES\n");

    return 0;
}

 

 

 

 

 

POJ1860 Currency Exchange(最短路径) 题意:: 有n种货币,m种兑换方式,每次兑换是这样计算的:如果一开始有V单位b货币,Rab是从a换到b的汇率,Cab是交换需要的手续费,最后能换到(V-Cab)*Rab单位b货币。一开始的货币种类是s,要求最后换回s,问能否进行一系列兑换,使最后换回s时钱增加。 要点: 如果能够经过一个回路返回起点使钱增加,那么可以经过无数次回路,使钱无限增多。所以就转化为bellman算法求是否有负权回路 阅读详情

相关推荐

stm32 + freertos + c++混合编程方法

其他一些资料上面,c++配置成--cpp11或者-cpp 都是把工程配置成c++。三、添加cpp文件,我们调用cpp文件里面的接口函数,不需要修改main.c后缀名。2、配置工程编译时候是--c99,是因为工程里面FreeRTOS是c语言,c++模式会报错。我们这里是默认c,编写的c++文件,单独选择--cpp编译,这在后面配置!c++是面向对象编程,对于一些项目来说,c++编程更加合适!stm32cubemax配置,这里就不写了,配置资料比较多。这里就是让cpp文件在c++下编译。最后,编程成功,点亮!

yuhu0012的博客 2629

poj1860解题报告(两种解法)

给定一些站点可以交换货币,判断持有某一种货币的人是否可以增值财产.解法1:基本思路是寻找一个正环,包含出发点s.没有用Bellman_ford算法,采用的是深度搜索优先(DFS),当一个节点被访问过之后,再次访问,就说明找到了一条回路.这时候需要判断找到的回路是不是正的.比较当前节点的货币数量与出发时节点的货币数量(一个节点可能有很多货币状态,因为可以通过不同的途径到达该节点,所以需要利用一个栈把状

pyb的博客 874

PROFINET非周期数据通信实战:从报文解析到参数读写

本文详细解析了PROFINET非周期数据通信的实战应用,从报文结构到参数读写全流程。通过西门子PLC与驱动器的配置案例,深入讲解非周期通信在工业自动化中的关键作用,包括硬件选型、软件配置及常见问题排查,帮助工程师高效实现设备参数配置与诊断。

weixin_42522953的博客 514

poj1860(Bellman-Ford算法)

题意:首先给出四个数字:n–货币数量,M–交换点数,S–货币尼克的数量,V–他拥有的货币单位的数量; 后面的M行给出每个兑换点可以用6个数字来描述:整数A和B——它兑换的货币数量,以及实际RAB、CAB、RBA和CBA——A兑换B和B兑换A时的汇率和佣金。 思路:采用Bellman-Ford算法: 1.初始化时将起点 s 到各个顶点 v 的距离 dist(s->v) 赋值为 ∞,dist(s->s) 赋值为 0; 2.后续进⾏最多 n-1 次遍历操作 (n 为顶点个数), 对所有的边进⾏松弛操作

Keep_Trying_Go的博客 1068

SpringBoot+Flowable 6.8.0实战:5分钟搞定免登录流程图设计器

本文详细介绍了如何通过SpringBoot与Flowable 6.8.0深度整合,快速实现免登录流程图设计器的集成方案。通过排除默认安全配置、自定义安全策略和用户模拟服务,开发者可在5分钟内完成设计器的部署,适用于快速原型开发和企业内部工具搭建。

weixin_29204205的博客 280

31、摩擦学中的材料选择

本博文深入探讨了摩擦学应用中材料选择的重要性,分析了材料的机械、物理和化学属性对摩擦学性能的影响。同时介绍了材料匹配原则、处理方法及表面涂层技术,以优化耐磨性和抗腐蚀性。通过实际案例和评估方法,为读者提供了系统化的材料选择流程和决策依据。

juice的博客 246

POJ 1860(最短路之Bellman-Ford)

题目链接:http://poj.org/problem?id=1860 题意:首先给出四个数n,m,s,v,分别表示n种货币,m个兑换关系,s源货币,源货币的本金v 然后给出m行,每行给出6个数beg,end,r1,c1,r2,c2,分别表示beg和end货币兑换的比率和手续费,end和beg货币兑换的比率和手续费 。问能否通过货币兑换使手里的源货币依然是第s中货币,并且本金增多。 思路:

To be excellent! 902

量化交易python代码解析:从狙击手算法到最优限价算法

在金融市场的竞技场上,量化交易如同一位冷静的策略大师,它以数学模型为剑,以计算机程序为盾,精准出击,捕捉市场的微妙波动。本文将深入探讨五种核心量化交易算法:直接委托算法(DMA)、时间加权平均算法(TWAP)、冰山算法(Iceberg)、狙击手算法(Sniper)、条件委托算法(Stop)以及最优限价算法(BestLimit),揭开它们背后的运作机制与实战应用。

木头大左的博客 1887

poj1860(图论,bellman-ford)

传送门:poj1860。 题意:有多种货币和多个货币兑换处,每个货币兑换处能将确定的两种货币互相兑换,但要收取一定的手续费,给你一种初始货币和一定的数量问你能不能经过兑换后使其数量变多。最后要换回初始的货币种类。 货币兑换公式:Vb=(Va-Cab)*Rab. 将每种货币看为一个点,一种货币能兑换兑换成另一种就在这两个点之间加一条边,即每个货币兑换处能在两个点之间形成一个环,要使货币增值就是

WA是一笔财富 435

【报错解决】OpenClaw 报错 ENOENT: no such file or directory, open ‘/root/.npmrc‘:配置文件路径不存在

本文分析了OpenClaw平台在国产操作系统环境下运行时出现的ENOENT: no such file or directory, open '/root/.npmrc'错误。该问题源于容器环境中root用户的npm配置文件缺失,导致插件依赖安装失败。文章详细解释了npm配置加载机制和容器环境的特殊性,提出了四种解决方案:手动创建配置文件、写入基础配置、使用全局配置替代以及容器启动时自动初始化。最后指出该错误暴露了工程中对默认路径盲目信任的问题,强调显式声明运行环境依赖的重要性。

博客 2015

[SV]SystemVerilog状态机实现案例

本文介绍了SystemVerilog中状态机的实现方法。首先使用枚举类型定义状态(TOP_HIB、TOP_BG、TOP_LDO、TOP_NOR),然后通过三个主要任务实现状态机:1)格式化现态寄存器处理状态转换;2)描述状态转移条件,包括计时器和稳定时间判断;3)基于当前状态和输入信号确定次态。状态机在时钟边沿或复位时更新状态,实现了从休眠到正常工作状态的转换逻辑,包含电源稳定时间检测等关键功能。

元直的博客 2021

poj1860(最短路,负环)

/* translation: 给出若干货币,以及货币之间的转换方法。假设知道A->B:r=29.75,c=0.39。则由100货币A转换为B为 B=(100 - 0.39) * 29.75 。现在给你一种特定的货币以及每种货币间的r和c,求其能否通过某种转换方式 使得最终转换为本来货币时,资产增加? solution: 最短路径的bellmanFord算法,判断负环。 可以设dis

林伏案的博客 557

开关电源-LLC基本原理

本文详细介绍了LLC谐振变换器的兴起原因、基本工作原理、变换器特点及拓扑结构。重点讨论了半桥、全桥LLC及其软开关技术,包括零电压开关(ZVS)和零电流开关(ZCS)。通过理解简单的谐振电路(RL、RC、LC)来阐述LLC如何改变电压增益,以及如何通过调节频率实现输出电压的稳定性。

让你爱上电路设计 2万+

poj1860 Currency Exchange(货币交换,最短路问题)

Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 17436   Accepted: 6112 Description Several currency exchange points are working in our city.

twobqn123的专栏 844

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

最短路-SPFA

最短路-SPFA 文章目录最短路-SPFASPFA算法描述模板例题POJ-3259 Wormholes题目描述思路分析详细代码POJ-1860 Currency Exchange题目描述思路分析详细代码POJ-1062 昂贵的聘礼题目描述思路分析详细代码 SPFA SPFA算法是基于Bellman-Ford队列优化的算法,通常处理求含负边权的单源最短路径的算法,可以用于判断是否有负权环,最坏时间复杂度O(VE)。 算法描述 初始化dist数组,除起点s以外的点的距离初始化为INF,dist[s]=0

weixin_49393180的博客 750

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【POJ1860】Currency Exchange

【POJ1860】Currency Exchange 题目链接:http://poj.org/problem?id=1860 题意是,现在有几种钞票,可以在这些钞票中进行兑换,兑换时必须将手中的钞票全部兑换成另一种,给出一些兑换的方式,每种方式有固定的钞票类型,手续费和兑换比例,最开始你有一些某种类型的钞票,问是否能是手中的钞票增多(最后仍需兑换成原来的钞票)。 问题的本质是

橘黄色灯光 454

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

POJ 1860 Currency Exchange (Bellman-Ford)

最短路径学了几种算法,但是一直没有学这个Bellman-Ford算法,因为在求最短路径的时候复杂度较高,不如某D氏算法。但是在求解一些特定问题的时候,他能判断是否存在回路这一特性能发挥很好的最用。 例如对于POJ1860,这题英文描述比较NC,看了discuss之后才敢确定自己理解的是正确的。这题是可以多次经过同一种货币的。因此,当求出最长路后,除了是s点的dis大于v的情况是YES外...

122

POJ1860 bellman-ford算法

POJ1860 bellman-ford算法 目的 求单源权值可负最短路径,判断有无负权回路 基本思路 dis[N]记录当前源点到所有N个点的路径长度,dis[]下标对应每个点的标号;初始将源点dis设为0,其余各点dis设为+∞ 遍历所有边,假如该边起点的dis+该边权值 < 该边终点的dis,说明最短路径长度应该被更新:令该边终点的dis=该边起点的dis+该边权值。每次遍历称为...

qq_43513855的博客 202

关于基本最短路求解总结

最近数据结构也要考试来着,所以把最短路的一些基础题给做了一下,大概就以下几种方法: 1.floyd算法: 嵌套三个循环,利用离散的求关系传递闭包的逻辑关系,可求两点直接的最短路径,不过复杂度在O(n^3),一般用在n比较小的时候,在判断流通货币等问题时,利用floyd也可以起到良好效果,因为利用bellman当然也可以判断是否有回路,但要判断这个回路是否可以产生流通差价还是需要一些特定处理的,

NiaNiaJR的专栏 1023

POJ 1860 Currency Exchange 【dijkstra + 多一次松弛】

POJ 1860 Currency Exchange 【dijkstra + 多一次松弛】 题目链接:poj 1860 题目大意: 这个城市一共有N种货币,两种货币之间有兑换方式,计算公式为 (A货币-A到B佣金) * A到B的汇率 = B货币,问能不能通过不断兑 换,使初始货币增加。 Input: 第一行分别是N(货币种类)P(兑换方式数)M(初始货币种类)S(初始拥有的货币量) 接下来的P行,每一行分别是 A种类 B种类 A到B的汇率 A到B的佣金 B到A的汇率 B到A的佣金 Output: 可以使

qq_43555122的博客 222

poj1860

poj1860[url]http://poj.org/problem?id=1860[/url] [code="c++"] #include #include #define ADJUST 0.00000001 using namespace std; struct E { int start; int end; double r; double c; ...

Midnight 144

POJ1860(最短路好像都能做,这边我们用SPFA)

POJ1860题解,算是个进阶最短路的练习,题目中等(翻译占难度的百分之五十)

illusion2019827的博客 271

POJ1860Currency Exchange

BellmanFord解决poj1860问题

WinForBest 374

最短路

POJ 3268 题目链接 题意 找到n个地点到目的地的往返最短路程中的最大值(单向的路径,所以往返可能不同) 思路 跑两遍最短路,其中一个道路是原先的道路,另一个中的道路是起点终点互换的道路 #include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> using namespace std; const int N

zhe_zhenbuhui_a的博客 168

poj 1860

我们熟悉的算法dijkstra可用于求单源点到其他各点的最短距离。但是有一个问题在于,图中所有边的权之都应该为正值。因为如果有负权值的边,则只要绕着这条负值边一直走,最算路径很可能越来越短。而这正是bellman ford算法的思想:如果路径可以缩短,那么就按照dijkstra的算法让路径进行N-1次(N为图中的顶点个数)缩短。如果N-1次缩短之后仍能继续缩短,那么图中必定存在负边。 算法的思想

冰上游鱼 2085

最短路基础与习题

目录 前言 Floyd算法 Dijkstra算法 详解 模板 Spfa算法 详解 模板 例题 A.POJ-2387 Til the Cows Come Home B.POJ-2253 Frogger C.POJ-1797 Heavy Transportation D:POJ-3268 Silver Cow Party E:POJ-1860 Currency Exc...

weixin_43870697的博客 1457
上一篇: 基础最短路四 POJ3268
下一篇: 基础最短路六 POJ3259
仰天倀笑
博客等级 码龄10年 313粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值