题目大意:有多种汇币,汇币之间可以交换,这需要手续费,当你用100A币交换B币时,A到B的汇率是29.75,手续费是0.39,那么你可以得到(100 - 0.39) * 29.75 = 2963.3975 B币。问s币的金额经过交换最终得到的s币金额数能否增加。   这道题能加深对Bellman-Ford的理解。才发现Bellman-Ford不止能求最短路,也能求一类“最优路”问题。 和求最短路一样,给每个节点一个dist[]标号,这里表示该节点金币额的下界。然后就像最短路那样“松弛”: 对于每条边(u,v), dist[v] = max(dist[v], [dist[u]-commission(u,v)] * rate(u,v)); 最后判断一下dist[s]是否比初始值大即可。


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MID(x,y) ((x+y)>>1)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;typedef long long LL;
//¾«¶ÈÄ£°å
const double eps = 1e-8;
bool dy(double x,double y)  {   return x > y + eps;}        // x > y
bool xy(double x,double y)  {   return x < y - eps;}         // x < y
bool dyd(double x,double y) {   return x > y - eps;}         // x >= y
bool xyd(double x,double y) {   return x < y + eps;}        // x <= y
bool dd(double x,double y)  {   return fabs( x - y ) < eps;}    // x == ystruct node{int u, v;double rate, commission;
}edge[201];
int n, m, s, k;
double v;
double dist[101];bool bellman_ford(int s, double v){mem(dist, 0);dist[s] = (double)v;while(xyd(dist[s], v)){bool relax = false;for (int i = 0; i < k; i ++){if (xy(dist[edge[i].v], (dist[edge[i].u] - edge[i].commission)*edge[i].rate)){relax = true;dist[edge[i].v] = (dist[edge[i].u] - edge[i].commission)*edge[i].rate;}}if (!relax)break;}if (dy(dist[s], v))return true;return false;
}int main(){scanf("%d %d %d %lf", &n, &m, &s, &v);k = 0;for (int i = 0; i < m; i ++){int tmpa, tmpb;double rab, cab, rba, cba;scanf("%d %d %lf %lf %lf %lf", &tmpa, &tmpb, &rab, &cab, &rba, &cba);edge[k].u = tmpa;edge[k].v = tmpb;edge[k].rate = rab;edge[k++].commission = cab;edge[k].u = tmpb;edge[k].v = tmpa;edge[k].rate = rba;edge[k++].commission = cba;}if (bellman_ford(s, v))puts("YES");elseputs("NO");return 0;
}

转载于:https://www.cnblogs.com/AbandonZHANG/archive/2013/04/11/4114234.html

POJ 1860 Currency Exchange (Bellman-Ford)相关推荐

  1. POJ 1860 Currency Exchange 最短路+负环

    原题链接:http://poj.org/problem?id=1860 Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Tota ...

  2. poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)

    链接:poj 1860 题意:给定n中货币.以及它们之间的税率.A货币转化为B货币的公式为 B=(V-Cab)*Rab,当中V为A的货币量, 求货币S通过若干此转换,再转换为原本的货币时是否会添加 分 ...

  3. poj 1860 Currency Exchange (最短路bellman_ford思想找正权环 最长路)

    感觉最短路好神奇呀,刚开始我都 没想到用最短路 题目:http://poj.org/problem?id=1860 题意:有多种从a到b的汇率,在你汇钱的过程中还需要支付手续费,那么你所得的钱是 mo ...

  4. POJ 1860 Currency Exchange (SPFA松弛)

    题目链接:http://poj.org/problem?id=1860 题意是给你n种货币,下面m种交换的方式,拥有第s种货币V元.问你最后经过任意转换可不可能有升值.下面给你货币u和货币v,r1是u ...

  5. POJ 1860 Currency Exchange

    英语太渣读了半天,理解了题意就好办了--Bellman_ford算法.在n-1次松弛后,如果依然存在满足松弛的情况返回1.说简单点就是判读是否存在正环. #include<stdio.h> ...

  6. POJ 1860 Currency Exchange

    题目大意:假設有A,B兩種貨幣,要將A換成B,須透過匯率Rab和手續費Cab,因此實際得到B貨幣=(A-Cab)*Rab元. 第一行輸入N, M, S, V,N表示共有N種貨幣(1<=N< ...

  7. POJ 1860: Currency Exchange 【SPFA】

    套汇问题,从源点做SPFA,如果有一个点入队次数大于v次(v表示点的个数)则图中存在负权回路,能够套汇,如果不存在负权回路,则判断下源点到自身的最长路是否大于自身,使用SPFA时松弛操作需要做调整 # ...

  8. POJ - 1860 货币兑换(bellman)

    题目: 传送门 我们城市有几个货币兑换点.让我们假设每个点专门研究两种特定的货币,并且只与这些货币进行兑换操作.可以有多个点专门用于同一对货币.每个点都有自己的汇率,A到B的汇率就是1A得到B的数量. ...

  9. *【POJ - 1860】Currency Exchange (单源最长路---Bellman_Ford算法判正环)

    题干: Description Several currency exchange points are working in our city. Let us suppose that each p ...

最新文章

  1. SAP HUM嵌套HU研习之HU03显示内层HU数据
  2. Jfreechart显示数据点图表(线上可以显示点数据)
  3. 使用php简单网页抓取和内容分析,使用PHP简单网页抓取和内容分析_php
  4. IT职业发展与诺兰模型
  5. 将根据时间戳增量数据方案修改为根据批次号增量数据方案
  6. Precious Plastic 中文手册 V1.0
  7. VB.NET 教程_04_高级教程
  8. 零基础学SQL(三、MYSQL环境变量配置及启动)
  9. vos3000配置与通讯测试(一)
  10. 《Java编程思想第五章》:初始化与内存
  11. js vue 获取 (昨天、今天、明天) 时间
  12. 7939.com,7b.com.cn,9505.com,4199.com 清除工具(转)
  13. 《恒盛策略》外资巨头突然出手!又有炒股软件罢工
  14. hdu2072单词数(思维)
  15. Android数据存储(二)----PreferenceFragment详解
  16. 如何保护您的数据免遭未经授权的访问
  17. 1.23 定语从句 感叹句
  18. 秒杀抢单系统软件架构优化思路
  19. 易基因 | 文献速递:RRBS方法绘制1538例乳腺癌甲基化图谱并预测癌症发生/预后
  20. MCD19A2 MAIAC AOD 数据处理(三)均值+同日镶嵌+重投影(Grid转经纬度)

热门文章

  1. python语言自学-为什么建议大家都学习Python语言?原因在这
  2. python语言自学-【经验分享】自学Python的学习顺序!附学习资料
  3. 老师学python可以干嘛-python语言可以干什么
  4. 安装完python后怎么使用-python安装后怎么启用
  5. python3.7.2安装-Centos7.6,安装python3.7.2
  6. python的第三方库-Python 的第三方库到底行不行啊?
  7. python基本使用-Python的基本用法
  8. 如何自学python爬虫-python爬虫学习过程:
  9. python哪一版好用-最好的 Python IDE,你们推荐使用哪一个?
  10. python 文字语音朗读-python 利用pyttsx3文字转语音过程详解