poj 1860 Currency Exchange 解题报告
题目链接:http://poj.org/problem?id=1860
题目意思:给出 N 种 currency, M种兑换方式,Nick 拥有的的currency 编号S 以及他的具体的currency(V)。M 种兑换方式中每种用6个数描述: A, B, Rab, Cab, Rba, Cba。其中,Rab: 货币A 兑换 货币B 的汇率为Rab,佣金为Cab。Rba:货币B 兑换 货币 A 的汇率,佣金为Cba。假设含有的A货币是x,那么如果兑换成B,得到的货币B 就是:(x-Cab) * Rab。问从 货币S 经过一定次数的兑换,最终回归到货币S,能否使得 Nick 本来含有的 S 大。
思路我是借鉴这个人的:
http://blog.csdn.net/lyhvoyage/article/details/19281013
可以说,是用了Bellman_ford 的 逆向思维。传统的Bellman_ford 是用来求可以含有负边权的最短路径,且判断是否有负权回路。
这个题目希望我们验证是否存在正权回路:顶点的权值能不断增加,且能无限一直松弛下去。
不过初始化与传统的Bellman_ford 是不同的, dist[S] = V,其他dist[i] = 0 / 无穷小。当 S 到其他点的 距离能不断增大时,说明存在正权回路。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = 1e4 + ;
const int maxv = + ; double has, dist[maxv];
int cnt, type;
int N, M; struct node
{
int a, b;
double rate, commission;
}currency[maxn]; bool Bellman_ford()
{
for (int i = ; i <= N; i++)
dist[i] = (i == type ? has : );
for (int i = ; i < N; i++)
{
bool flag = false;
for (int j = ; j < cnt; j++)
{
double t = (dist[currency[j].a] - currency[j].commission) * currency[j].rate;
if (t > dist[currency[j].b])
{
dist[currency[j].b] = (dist[currency[j].a] - currency[j].commission) * currency[j].rate;
flag = true;
}
}
if (!flag)
break;
}
for (int j = ; j < cnt; j++)
{
double t = (dist[currency[j].a] - currency[j].commission) * currency[j].rate;
if (t > dist[currency[j].b])
return true;
}
return false;
} int main()
{
while (scanf("%d%d%d%lf", &N, &M, &type, &has) != EOF)
{
int A, B;
double Rab, Cab, Rba, Cba;
cnt = ;
while (M--)
{
scanf("%d%d%lf%lf%lf%lf", &A, &B, &Rab, &Cab, &Rba, &Cba);
currency[cnt].a = A;
currency[cnt].b = B;
currency[cnt].rate = Rab;
currency[cnt].commission = Cab; currency[++cnt].a = B;
currency[cnt].b = A;
currency[cnt].rate = Rba;
currency[cnt++].commission = Cba;
}
printf("%s\n", Bellman_ford() ? "YES" : "NO");
}
return ;
}
poj 1860 Currency Exchange 解题报告的更多相关文章
- 最短路(Bellman_Ford) POJ 1860 Currency Exchange
题目传送门 /* 最短路(Bellman_Ford):求负环的思路,但是反过来用,即找正环 详细解释:http://blog.csdn.net/lyy289065406/article/details ...
- POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环)
POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环) Description Several currency ...
- POJ 1860 Currency Exchange + 2240 Arbitrage + 3259 Wormholes 解题报告
三道题都是考察最短路算法的判环.其中1860和2240判断正环,3259判断负环. 难度都不大,可以使用Bellman-ford算法,或者SPFA算法.也有用弗洛伊德算法的,笔者还不会SF-_-…… ...
- POJ 1860 Currency Exchange 最短路+负环
原题链接:http://poj.org/problem?id=1860 Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Tota ...
- POJ 1860——Currency Exchange——————【最短路、SPFA判正环】
Currency Exchange Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u S ...
- POJ 1860 Currency Exchange (最短路)
Currency Exchange Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u S ...
- POJ 1860 Currency Exchange【bellman_ford判断是否有正环——基础入门】
链接: http://poj.org/problem?id=1860 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- poj - 1860 Currency Exchange Bellman-Ford 判断正环
Currency Exchange POJ - 1860 题意: 有许多货币兑换点,每个兑换点仅支持两种货币的兑换,兑换有相应的汇率和手续费.你有s这个货币 V 个,问是否能通过合理地兑换货币,使得你 ...
- POJ 1860 Currency Exchange (Bellman-Ford)
题目链接:POJ 1860 Description Several currency exchange points are working in our city. Let us suppose t ...
随机推荐
- 关于 最短路条数 和 边不可重复最短路条数问题 /hdu3599(边不可重复最短路)
原先一直在做一道省赛题,由于题意错误理解成球最短路条数,误打误撞敲了最短路条数,又发现hdu3599(多校)求边不可重复最短路条数.下面说说俩种问题解法: 最短路条数: 求一个图一共一几条最短路径,思 ...
- eclispe集成web插件
最近公司需要使用开源框架开发,所有下载了最新版本的eclispe工具,但是在官网下载的eclispe是不包含web插件的,无法创建web项目,需要自行集成web插件 eclipse官网下载地址:htt ...
- 计算机操作系统处理机调度读后感—–关于进程概念的剖析。从RING3到RING0(32位操作系统)
计算机操作系统处理机调度读后感: 笔者在看操作系统西安电子科技大学那本书的时候,初次感觉本科教的不会太难,所以没有认真的看,但是随后这本书讲的刷新了我的世界观.这本书居然是ring0级别的,这时不禁吐 ...
- 实践与理解CMM体系
我的项目管理之路--5.实践与理解CMM体系 分类: 管理专辑(65) 过程改进(9) 软件工程(52) 版权声明:本文为博主原创文章,未经博主允许不得转载. 一个现代企业我们可以把它比作为自然界 ...
- Scala学习笔记 & 一些不错的学习材料 & 函数编程的历史八卦
参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-funinscala1/ 这也是一个系列 严格意义上的编程范式分为:命令式编程(Imper ...
- STL源代码分析--deque
一.deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector.array无法成长,vector虽可成长,却仅仅能向尾端成长.并且其 ...
- 【转载】究竟啥才是互联网架构“高并发”
一.什么是高并发 高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求. 高并发相关常用的一些指标有响应时间( ...
- 【转载】WebService相关概念
一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分.但是不得不承认的是W ...
- ZOJ 3230 Solving the Problems(数学 优先队列啊)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3230 Programming is fun, Aaron is ...
- HDU 2049 不容易系列之(4)——考新郎 (递推,含Cmn公式)
不容易系列之(4)——考新郎 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...