题目链接:https://vjudge.net/problem/POJ-1860

大致题意:有不同的货币,有很多货币交换点,每个货币交换点只能两种货币相互交换,有佣金C,汇率R。
每次交换算一次操作,问能不能经过一系列操作使得本来的货币的本金数额变大。
思路:相当于图,“一系列操作使得本金数额变大”说明有一个正的回路,能使得某种货币的数额增大,那么,
只要有这一个正的回路,那么我们一定可以让某种货币的数额变为无穷大,那么本来的货币的本金数额变大是一定的,
所有,我们只需要判断图中是否出现了一个正回路,有的话说明可以,一个没有说明都是负环,说明不能。
(这里有一个误区,只判断一次货币交换情况及就判断,可能A货币换成B货币的佣金很大或者汇率很低,那么只要我们有一个正环,
使得B的货币数额变为正无穷大,那么经过一系列操作后最后A的货币数额一定是增大的)
有负环,这里用bellman_ford算法也可以通过。

  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <cstdio>
  5. #include <string>
  6. #include <vector>
  7. using namespace std;
  8.  
  9. typedef long long LL;
  10. #define inf (1LL << 30) - 1
  11. #define rep(i,j,k) for(int i = (j); i <= (k); i++)
  12. #define rep__(i,j,k) for(int i = (j); i < (k); i++)
  13. #define per(i,j,k) for(int i = (j); i >= (k); i--)
  14. #define per__(i,j,k) for(int i = (j); i > (k); i--)
  15.  
  16. const int N = ;
  17. int n,m,s;
  18. double v;
  19. int U,V;
  20. double Ruv,Cuv,Rvu,Cvu;
  21. double value[N];
  22.  
  23. struct node{
  24. int u,v;
  25. double r,c;
  26. };
  27.  
  28. vector<node> E;
  29.  
  30. void input(){
  31.  
  32. rep(i,,m){
  33. cin >> U >> V >> Ruv >> Cuv >> Rvu >> Cvu;
  34. E.push_back( node{U,V,Ruv,Cuv} );
  35. E.push_back( node{V,U,Rvu,Cvu} );
  36. }
  37. }
  38.  
  39. bool bellman_ford(){
  40.  
  41. value[s] = v; //其他的货币数额都为0,s的货币金额为V
  42.  
  43. bool flag = true;
  44. rep(i,,n){
  45. flag = false;//每次赋值false,检测下面循环还能不能进行更新操作
  46. for(int j = ; j < E.size(); j++){//遍历所有交换情况
  47. //如果A->B 能使得B的货币金额变大,就更新
  48. if(value[E[j].v] < (value[E[j].u] - E[j].c) * E[j].r){
  49. value[E[j].v] = (value[E[j].u] - E[j].c) * E[j].r;
  50. }
  51.  
  52. flag = true;//进行了更新操作
  53. }
  54. if(!flag) break;//无法再进行更新操作
  55. }
  56.  
  57. //如果出现A->B 能使得B的货币金额变大,说明有一个正环
  58. for(int j = ; j < E.size(); j++){
  59. if(value[E[j].v] < (value[E[j].u] - E[j].c) * E[j].r) return true;
  60. }
  61. //遍历所有,都没出现正环,说明只有负环
  62. return false;
  63. }
  64.  
  65. int main(){
  66.  
  67. ios::sync_with_stdio(false);
  68. cin.tie();
  69.  
  70. cin >> n >> m >> s >> v;
  71. input();
  72. if (bellman_ford()) cout << "YES" << endl;
  73. else cout << "NO" << endl;
  74.  
  75. getchar();getchar();
  76. return ;
  77. }

kuangbin专题专题四 Currency Exchange POJ - 1860的更多相关文章

  1. (最短路 SPFA)Currency Exchange -- poj -- 1860

    链接: http://poj.org/problem?id=1860 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 2326 ...

  2. Currency Exchange POJ - 1860 (spfa)

    题目链接:Currency Exchange 题意: 钱的种类为N,M条命令,拥有种类为S这类钱的数目为V,命令为将a换成b,剩下的四个数为a对b的汇率和a换成b的税,b对a的汇率和b换成a的税,公式 ...

  3. Currency Exchange POJ - 1860 (spfa判断正环)

    Several currency exchange points are working in our city. Let us suppose that each point specializes ...

  4. Currency Exchange - poj 1860

    Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 22111   Accepted: 7986 Description Seve ...

  5. Currency Exchange POJ - 1860 spfa判断正环

    //spfa 判断正环 #include<iostream> #include<queue> #include<cstring> using namespace s ...

  6. poj - 1860 Currency Exchange Bellman-Ford 判断正环

    Currency Exchange POJ - 1860 题意: 有许多货币兑换点,每个兑换点仅支持两种货币的兑换,兑换有相应的汇率和手续费.你有s这个货币 V 个,问是否能通过合理地兑换货币,使得你 ...

  7. 最短路(Bellman_Ford) POJ 1860 Currency Exchange

    题目传送门 /* 最短路(Bellman_Ford):求负环的思路,但是反过来用,即找正环 详细解释:http://blog.csdn.net/lyy289065406/article/details ...

  8. POJ 1860 Currency Exchange (最短路)

    Currency Exchange Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u S ...

  9. POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环)

    POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环) Description Several currency ...

随机推荐

  1. Hive常见错误

    1.root is not allowed to impersonate root 修改etc/hadoop/core-site.xml,增加如下配置: <property> <na ...

  2. kali 更改图标村大小

    1.“设置” --> "通用辅助功能" --> "大号字体" 2.在终端中输入 “gnome-tweaks” 打开 优化 --> 扩展  -- ...

  3. PatchMatchStereo可能会需要的Rectification

    在稠密三维重建中,rectification可以简化patch match的过程.在双目特征匹配等场景中其实也用得到,看了一下一篇论文叫< A Compact Algorithm for Rec ...

  4. webstorm创建js文件时自动生成js注释

    设置webstorm创建js文件时自动生成js注释 settings--Editor--File and Code Temlates 黑色框框里的内容自己填写上去,以下是参考的代码块: /** * @ ...

  5. python面试题300多题

    第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解释型和编译型编程语言? P ...

  6. spring boot 从开发到部署上线(简明版)

    我们组有一个优良传统--借鉴于"冰桶挑战赛"的形式,采取点名的方式,促进团队成员每天利用一小段时间,不断的完善团队 wiki 的小游戏. 但有时候忙于业务,可能会忘记,所以我写了一 ...

  7. [转帖]IPC网络高清摄像机基础知识1(IPC芯片市场分析以及“搅局者”华为海思 “来自2013年”)

    IPC网络高清摄像机基础知识1(IPC芯片市场分析以及“搅局者”华为海思 “来自2013年”) 2016-06-02 14:23:49 Times_poem 阅读数 9734更多 分类专栏: IPC网 ...

  8. WPF矢量字体图标(iconfont)

    原文:WPF矢量字体图标(iconfont) 转载:点击打开链接 步骤: 一.下载添加iconfont文件 二.添加到资源文件夹,并设置不复制,且为资源文件 三.增加FIcon.xaml文件 < ...

  9. efCore+Mysql+Net Core

    1.首先新建一个空的Asp.net core项目 2.新建一个类    gj.cs public class gj { // <summary> /// 主键 /// </summa ...

  10. C:\Program不是内部或外部命令,也不是可运行的程序或批处理文件。

    问题描述:C:\Program不是内部或外部命令,也不是可运行的程序或批处理文件. 解决办法:C:\"Program Files"\具体文件目录. 具体场景:在cmd或者批处理文件 ...