题目大意:假設有A,B兩種貨幣,要將A換成B,須透過匯率Rab和手續費Cab,因此實際得到B貨幣=(A-Cab)*Rab元。

第一行輸入N, M, S, V,N表示共有N種貨幣(1<=N<=100),M表示底下有M行,每一行有六個數字A,B,Rab,Cab,Rba,Cab,Rab表示A換成B的匯率,Cab表示A換成B需要扣除的手續費,Rba和Cba同理。現在Nick有第S種貨幣V元,題目問Nick透過不斷交換貨幣,然後最後換回第S種貨幣的時候能否大於V元?

解题思路:Bellman-ford改一改,只要能够无限松弛,就符合题意(我这里优化了一下Bellman-ford,就是不能松弛了,就退出松弛循环(这道题可以直接判断不行了), 感觉有点像冒泡的优化

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define MAXVERTEXNUM 500
 5 #define INF 1000000
 6 using namespace std;
 7
 8 struct E
 9 {
10     int a, b;
11     double exchange_currency, tips;
12 }Edge[MAXVERTEXNUM];
13 int Nv, Ne, s, num = 0;
14 double org, dist[MAXVERTEXNUM];
15
16 bool Bellman_Ford()
17 {
18     for (int i = 1; i < Nv; ++i)
19     {
20         bool flag = false;
21         for (int j = 0; j < num; ++j)
22         {
23             if (dist[Edge[j].b] < (dist[Edge[j].a] - Edge[j].tips) * Edge[j].exchange_currency)
24             {
25                 dist[Edge[j].b] = (dist[Edge[j].a] - Edge[j].tips) * Edge[j].exchange_currency;
26                 flag = true;
27             }
28         }
29         if (!flag)
30             return false;//写break还要快一些,黑人问号???
31     }
32
33     for (int i = 0; i < num; ++i)
34         if (dist[Edge[i].b] < (dist[Edge[i].a] - Edge[i].tips) * Edge[i].exchange_currency)
35             return true;
36
37     return false;
38 }
39
40 int main()
41 {
42     ios::sync_with_stdio(false);
43
44     cin >> Nv >> Ne >> s >> org;
45     memset(dist, 0, sizeof(dist));
46     dist[s] = org;
47     //init
48
49     for (int i = 1; i <= Ne; ++i)
50     {
51         int V1, V2;
52         double t1, t2, t3, t4;
53         cin >> V1 >> V2 >> t1 >> t2 >> t3 >> t4;
54         Edge[num].a = V1, Edge[num].b = V2;
55         Edge[num].exchange_currency = t1;
56         Edge[num++].tips = t2;
57         Edge[num].a = V2, Edge[num].b = V1;
58         Edge[num].exchange_currency = t3;
59         Edge[num++].tips = t4;
60     }
61
62     if (Bellman_Ford())
63         cout << "YES" << endl;
64     else
65         cout << "NO" << endl;
66
67     return 0;
68 }

转载于:https://www.cnblogs.com/ducklu/p/9231563.html

POJ 1860 Currency Exchange相关推荐

  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 (Bellman-Ford)

    题目大意:有多种汇币,汇币之间可以交换,这需要手续费,当你用100A币交换B币时,A到B的汇率是29.75,手续费是0.39,那么你可以得到(100 - 0.39) * 29.75 = 2963.39 ...

  7. POJ 1860: Currency Exchange 【SPFA】

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

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

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

  9. Currency Exchange (POJ 1860)

    Currency Exchange 思路:用spfa来找正环,只要存在一个正环(cnt >= n),那么走这个圈无穷次后资产一定正无穷,因为路是双向的,所以一定可以返回原来的货币,正无穷再怎么亏 ...

最新文章

  1. 基于 OpenYurt EdgeX Foundry 的云边端一体化解决方案
  2. 8086地址传送指令LEA
  3. c++用new求数组中n个数的和_在C++中实现任意大小数组的定义方法
  4. hadoop2.8配置_Hadoop2.8.2安装与配置(单机)
  5. remmima 不能保存_Vue项目实现表单登录页保存账号和密码到cookie功能_婳祎_前端开发者...
  6. Logistic混沌序列加密
  7. Android API 指南
  8. python基础安装第三方(十三)
  9. 发布一个 host 管理插件
  10. JavaScript和JQuery获取DIV的值
  11. 从全息投影到全息平台,必须克服7个障碍
  12. 77GHz毫米波雷达快速chirp信号技术(五):CAPON Beamforming
  13. 出现 Unexpected token T in JSON at position 0 ,at JSON.parse (<anonymous>) 的解决方法
  14. 依据数据简单分析,发掘潜在客户
  15. 我是CTO,我为CEO吹过的牛逼买单!
  16. 腾讯研究院院长司晓:互联网大脑的人文侧面
  17. Java中随机数的产生
  18. 技术干货|昇思MindSpore 1.5版本中的亲和算法库——MindSpore Boost
  19. Arduino使用水位传感器
  20. 都说Dapper性能好,突然就遇到个坑,还是个性能问题

热门文章

  1. python练习册 每天一个小程序 第0013题
  2. 八. 输入输出(IO)操作3.面向字符的输出流
  3. atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97
  4. sencha touch 组件选择器getCmp和ComponentQuery.query()的效率解析
  5. 如何判断应用已经安装,如何判断Service,BroastCastReceiver,ContentProvider是否存在...
  6. SQL Azure(十) SQL Azure Data Sync数据同步功能(上)
  7. 查看文件more、less
  8. 解决英文版Windows 2003中文乱码问题
  9. cnn stride and padding_卷积神经网络(CNN) 第 4 课(上)
  10. hdu5108枚举因子求最小的m