【POJ2240】Arbitrage【负环】

POJ2240-Arbitrage【Floyd】 北大POJ2240-Arbitrage【Floyd】 解题报告+AC代码 立即下载

题目大意:

题目链接:http://poj.org/problem?id=2240
求一些货币互相兑换后能否增值。


思路:

负环半模板题。不能再这样水下去了

很明显的,把货币之间的利率转换成一个相乘的最短路问题,那么如果从一个点开始,走了一圈回到原来那个点时,钱数上涨了,那么久说明增值了。
这道题的输入是比较奇怪的,可以使用 m a p map map来把字符串转换成数字,然后跑正常的负环。


代码:

#include <cstdio>
#include <cstring> 
#include <map>
#include <iostream>
#include <queue>
#include <string>
using namespace std;

const int N=35; 
const int M=N*N;
const double Inf=1000000000000000000.0;
int n,m,head[N],tot,CNT,cnt[N];
double dis[N];
bool vis[N];
string s1,s2;

map<string,int> Name;

struct edge
{
	int next,to;
	double dis;
}e[M];

void add(int from,int to,double dis)
{
	e[++tot].to=to;
	e[tot].dis=dis;
	e[tot].next=head[from];
	head[from]=tot;
}

bool spfa()
{
	for (int i=1;i<=n;i++)
		dis[i]=0,vis[i]=0,cnt[i]=0;
	queue<int> q;
	q.push(1);
	dis[1]=1.0;
	vis[1]=1;
	cnt[1]=1;
	while (q.size())
	{
		int u=q.front(),v;
		q.pop();
		vis[u]=0;
		for (int i=head[u];~i;i=e[i].next)
		{
			v=e[i].to;
			if (dis[v]<dis[u]*e[i].dis)
			{
				dis[v]=dis[u]*e[i].dis;
				cnt[v]=cnt[u]+1;
				if (cnt[v]>n) return 1;
				if (!vis[v])
				{
					vis[v]=1;
					q.push(v);
				}
			}
		}
	}
	return 0;
}

int main()
{
	while (scanf("%d",&n)&&n)
	{
		memset(head,-1,sizeof(head));
		memset(e,0,sizeof(e)); 
		Name.clear();
		tot=0;
		for (int i=1;i<=n;i++)
		{
			//scanf("%s",&s1);
			cin>>s1;
			Name[s1]=i;  //记录编号 
		}
		scanf("%d",&m);
		for (int i=1;i<=m;i++)
		{
			double x;
			//scanf("%s%d%s",&s1,&x,&s2);
			cin>>s1>>x>>s2;
			add(Name[s1],Name[s2],x);  //取编号来连边
		}
		printf("Case %d: ",++CNT);
		if (spfa()) printf("Yes\n");
			else printf("No\n");
	}
}
从玩具车到手机充电:手把手带你用Multisim仿真Buck/Boost电路(附工程文件) 本文通过Multisim仿真软件,手把手教你搭建Buck降压电路和Boost升压电路,实现从12V到5V或3.7V到5V的电压转换。文章详细介绍了电路搭建步骤、关键波形观测技巧及常见故障排查方法,并附赠工程文件,帮助电子爱好者快速掌握电源转换技术。 阅读详情

相关推荐

【OpenCV3】cv::compare()使用详解

cv::compare()主要用于两个图像之间进行逐像素的比较,并输出比较的结果。具体用法如下: cv::compare() bool cv::compare( cv::InputArray src1, // 输入数组1 cv::InputArray src2, // 输入数组2 cv::OutputArray dst, // 输出数组 int cmpop // 比较操作子,见下表 ...

guduruyu的专栏 9762

[kuangbin带你飞]专题四【最短路练习】(floyd)

Arbitrage(poj 2240) Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currency. For example, suppose that 1 US Do...

qq_45377553的博客 262

大疆M3508电机使用CAN通信进行速度PID闭环控制详解

目录一. 简介二. 电机通信协议三. 电机PID控制原理四. 官方代码移植-中断接收五. 官方代码移植-查询接收 一. 简介 之前写过一篇文章STM32实现四驱小车(五)电机控制任务——电机速度PID控制算法,其中是以大疆的M3508电机为例进行讲解的(没错,就是RoboMaster机器人同款电机,不过Robomaster上的电机好像是小一号的M2006)。不少小伙伴私信问我要代码,我都回复说不是有官方demo么。后来问的人多了我大概明白了,看来官方的Demo还是有点门槛。可能是带FreeRTOS操作系统看

qq_30267617的博客 7万+

POJ2240,Arbitrage(Bellman-Ford)

题意大概就是给你一个有向图,让你判断是否存在正环(图不一定连通)。不一样的是,每个顶点都是一个字符串,不过不要紧,我们可以用一个map<string,int>,把他们改为整型数据。 代码如下: #include<cstdio> #include<iostream> #include<algorithm> #include<cstring>...

shamansi99的博客 295

RV1106G3的fastboot调试

本文详细描述了在幸狐的Luckfox Pico Ultra硬件平台上,使用官方SDK进行系统优化和YOLOv5s模型部署的过程。首先,硬件板卡使用幸狐的SDK进行EMMC非Fastboot配置时功能正常,但Fastboot配置编译失败,通过修改设备树中的ramdisk大小解决了编译问题,但运行时仍报错。幸狐提供的Fastboot烧录文件可正常运行,表明硬件支持Fastboot。随后,使用官方SDK版本rv1106_rv1103_240813进行编译和调试,发现EMMC Fastboot启动失败,通过修改U-

fzktongyong的博客 2360

踩坑ubuntu24.04 编译vtk9.3.1的安卓版本

NDK官方明确废弃了旧版 armeabi ABI,强制使用armeabi-v7a或arm64-v8a。错误信息显示你的构建系统仍在使用超级构建(superbuild)模式,并且内部引用了已不再支持的。生成的合并库: $(pwd)/libvtk_combined.a"超级构建过程可能内部未充分考虑现代NDK变化导致内部配置ARM老ABI,重复失败。echo "正在提取所有.o文件..."echo "合并前所有库的总大小:"# 提取所有.a文件中的.o文件。echo "创建合并库..."

zhangyihu321的专栏 1892

POJ 2240 Arbitrage(最短路 Floyd)

Arbitrage 大意: 给你m种货币,给你m种货币兑换规则,问通过这些规则最后能不能盈利。eg:1美元换0.5英镑,1英镑换10法郎,1法郎换0.21美元,这样1美元能换0.5*10.0.21=1.05美元,净赚0.05美元。 思路: 用Floyd找出每两种钱之间的最大兑换关系,遍历一遍,看有没有那种钱币最后能盈利,有就输出Yes,没有就是No。在处

GLSilence的专栏 1074

第1讲|AI产品经理全景图谱:不是“会用AI工具”,而是能对AI产品结果负责

本文从岗位本质出发,系统拆解 AI 产品经理的职责、岗位类型与能力模型,帮助读者理解 AI PM 与传统 PM 的核心差异,明确自己适合的转型方向,并建立“对 AI 产品结果负责”的产品认知。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1016

poj 2240 Arbitrage (Floyd)

链接:poj 2240 题意:首先给出N中货币,然后给出了这N种货币之间的兑换的兑换率。 如 USDollar 0.5 BritishPound 表示 :1 USDollar兑换成0.5 BritishPound。 问在这N种货币中是否存在货币经过若干次兑换后,兑换成原来的货币能够使货币量添加。 思路:本题事实上是Floyd的变形。将变换率作为构成图的路径的权值。只是构...

weixin_33729196的博客 141

【android bluetooth 案例分析 01】【HiCar 详解 3】【hicar时如何交换Wifi参数的】

如果直接使用 L2CAP(不经过 RFCOMM),会需要额外的协议来保证可靠性,而 RFCOMM 天然支持。BLE 广播的数据长度受限(31 字节 / 255 字节扩展),不适合传输复杂的 Wi-Fi 连接参数。使用 RFCOMM 传输参数,可以兼容不同厂商的车机和手机,而无需依赖特殊的蓝牙功能。手机解析这些参数,并使用 Wi-Fi Direct 连接到车机。,然后才能让 Wi-Fi Direct 进行真正的数据传输。,适合传输 Wi-Fi 连接参数等关键数据。,可以安全地交换 Wi-Fi 连接信息。

奔跑吧 android 的博客 1740

使用C# HslCommunication库实现三菱PLC通信(含完整代码示例)

在工业自动化开发中,上位机与PLC的通信是关键环节。HslCommunication库是一个开源的.NET工业通信库,支持三菱、西门子、欧姆龙等多个品牌PLC的通信协议。本文将演示如何通过库实现C#程序与三菱PLC的通信,并提供完整的代码示例。

StevenChen的博客 2291

POJ-2240(floyd算法简单应用)

Arbitrage poj-2240 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<map> using namespa...

258

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【题解】Arbitrage POJ - 2240 ⭐⭐ 【判负环】

Arbitrage POJ - 2240 Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currency. For example, suppose that 1 US ...

Suprit's blog 797

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

POJ - 2240 Arbitrage SPFA判断负环+map

题目链接 POJ-2240 题意 给定n种货币,m种交换关系,问是否能增值 解法 跟POJ - 1860一个揍性,利用SPFA判断正环即可。货币直接输入的名字,用map建立映射就可以了。POJ-1860 代码 #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #include<iostream> #include<map> #include<queue> #include<cstring&

TheSunspot的博客 406

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

POJ2240 Arbitrage(Floyd判负环)

跑完Floyd后,d[u][u]就表示从u点出发可以经过所有n个点回到u点的最短路,因此只要根据数组对角线的信息就能判断是否存在负环。 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<string> 5 #include&l...

dengliugong3918的博客 188

poj 2240 Floyd判断有向图负环(arbitrage)

题意:Arbitrage问题(套汇)。给定若干币种及一些币种转换的汇率,问能否有套汇的可能。 思路:如果以币种为定点,汇率为边建图,则相当于求一个圈,其上权值乘积大于1。将权值取对数再取负,变成求有向图负环。用floyd算法即可。(直接上Floyd,三层循环中判断直接用乘法也OK) #include #include #include #define min(a,b) ((a)<(b)?

dearmango 2126

poj2240Arbitrage 判断是否有负环

编辑器加载中... /* 题目: 问周游一圈后能不能换钱得到利润 分析: 有向图是否处在负环问题,因为涉及每个顶点都可能存在负环, 直接用flord算法做即可 */ #include <iostream> #include <string> #include <cstring> using name...

weixin_30312563的博客 105

POJ 2240 Arbitrage (求负环)

Arbitrage 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/I Description Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more...

dituonian8372的博客 174

I - Arbitrage POJ - 2240 ————floyd +负环+逆向思维

https://vjudge.net/contest/313997#problem/I /***** 将边转换为 反向边, 如果反向边 存在 负环(能减小的环路) 就表示 原图存在 能增加的环 *******/ #include<iostream> #include<cstdio> #include<cstring> #include<map&gt...

T.J的博客 225

poj2240Arbitrage(bellman_ford判负环)

题意 给n种货币,m条货币之前的汇率,判断最后能否从中套利 解题思路 典型的判定负环图的问题,题目给的货币字符串,用map来给不同的字符串一个映射就可以了 AC代码 #include<vector> #include<algorithm> #include<cstdio> #include<iostream> #include<set> ...

weixin_30745641的博客 130

POJ:2240 Arbitrage(bellmanford判负环变形题)

跟bellmanford判负环是一样的,只不过这里是要求最大值,而且是乘积,如果最大乘积大于1则说明yes,否则为no。 由于这里是求最长路,所以dist数组要初始化为最小即0。还有就是注意将源点初始化为1,我这里源点是0而不是1,这里WA了一次。。     #include #include #include #include #include #include using namesp

Fighting 842

[ An Ac a Day ^_^ ][kuangbin带你飞]专题四 最短路练习 POJ 2240 Arbitrage spfa求负环

题意就是问倒腾外币能不能升值 不用spfa 用其他的最短路算法也可以 松弛条件换成dist[v]<dist[u]*e[u][i].value 当然 貌似只有spfa有这个坑…… 有A (value>1.0) A 这种情况……我的天 用Dij Floyd都只用判断如果松弛到了自己 那么一定有环 直接跳出就行 1 #include<cstdio> ...

weixin_30695195的博客 110

POJ 2240 Arbitrage 【Floyd判正环+自环坑】

POJ 2240 Arbitrage 题目链接:vjudge传送门 题目大意: 给定货币种数及各自名称,及其给定某两种货币之间的转化比率(相乘即可) 问是否存在一种货币套现的方法,即有某种货币,经过货币之间的转换使得,其数额是原来的i倍,i>1 具体思路: 不得不说,这题真是垃圾题。坑人 先说一下思路,判断正环的问题,因为不是单一源点,所以不选择spfa,而选用用floyd判断正环 状态转移...

指弹键盘哼民谣 554

poj 2240 Arbitrage 题解

Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21300   Accepted: 9079 Description Arbitrage is the use of discrepancies in currency exchange rates t

SBS的博客 642

【POJ 2240】 Arbitrage

【POJ 2240】Arbitrage

ACMer' 973
上一篇: 【洛谷P4381】Island【基环树】【树的直径】【单调队列】【dp】
下一篇: 【newSSLOJ1296】猫咪的进化【dp】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值