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

思路:判正环,Bellman-ford和SPFA,floyd都可以,有正环就可以套利。

这里用SPFA,就是个板子题吧,把松弛改成乘法操作就好了。


  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <queue>
  6. #include <string>
  7. #include <map>
  8. #include <cmath>
  9. #include <iomanip>
  10. using namespace std;
  11.  
  12. typedef long long LL;
  13. #define inf (1LL << 25)
  14. #define rep(i,j,k) for(int i = (j); i <= (k); i++)
  15. #define rep__(i,j,k) for(int i = (j); i < (k); i++)
  16. #define per(i,j,k) for(int i = (j); i >= (k); i--)
  17. #define per__(i,j,k) for(int i = (j); i > (k); i--)
  18.  
  19. const int N = ;
  20. map<string,int > si; //编号,方便建图
  21. int head[N];
  22. bool vis[N];
  23. int tot[N];
  24. double value[N];
  25. int cnt;
  26. int n;
  27.  
  28. struct Edge{
  29. int to;
  30. double w;
  31. int next;
  32. }e[];
  33.  
  34. void add(int u,int v,double w){
  35. e[cnt].to = v;
  36. e[cnt].w = w;
  37. e[cnt].next = head[u];
  38. head[u] = cnt++;
  39. }
  40.  
  41. bool SPFA(){
  42.  
  43. rep(i,,n) value[i] = ;
  44. value[] = ; //随意选个点就行
  45. rep(i,,n) vis[i] = false;
  46. rep(i,,n) tot[i] = ;
  47. vis[] = true;
  48. queue<int> que;
  49. que.push();
  50.  
  51. while(!que.empty()){
  52. int u = que.front();
  53. que.pop();
  54. vis[u] = false;
  55.  
  56. for(int o = head[u]; ~o; o = e[o].next){
  57. int v = e[o].to;
  58. double w = e[o].w;
  59.  
  60. if(value[v] < value[u] * w){
  61. value[v] = value[u] * w;
  62. if(!vis[v]){
  63. vis[v] = true;
  64. que.push(v);
  65. tot[v]++;
  66. if(tot[v] > n - ) return true; //有正环
  67. }
  68. }
  69. }
  70. }
  71.  
  72. return false;
  73.  
  74. }
  75.  
  76. int main(){
  77.  
  78. ios::sync_with_stdio(false);
  79. cin.tie();
  80.  
  81. int tot = ;
  82. while(cin >> n && n){
  83.  
  84. rep(i,,n) head[i] = -;
  85. cnt = ;
  86. si.clear();
  87. string in;
  88. rep(i,,n){
  89. cin >> in;
  90. si[in] = i;
  91. }
  92.  
  93. int m;
  94. string u,v;
  95. double w;
  96.  
  97. cin >> m;
  98. rep(i,,m){
  99. cin >> u >> w >> v;
  100. add(si[u],si[v],w);
  101. }
  102. cout << "Case " << ++tot << ": ";
  103. if(SPFA()) cout << "Yes" << endl;
  104. else cout << "No" << endl;
  105. }
  106.  
  107. getchar(); getchar();
  108. return ;
  109. }

Arbitrage POJ - 2240的更多相关文章

  1. Arbitrage - poj 2240 (Bellman-ford)

      Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17374   Accepted: 7312 Description Ar ...

  2. 最短路(Floyd_Warshall) POJ 2240 Arbitrage

    题目传送门 /* 最短路:Floyd模板题 只要把+改为*就ok了,热闹后判断d[i][i]是否大于1 文件输入的ONLINE_JUDGE少写了个_,WA了N遍:) */ #include <c ...

  3. POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环)

    POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环) Description Arbi ...

  4. poj 2240 Arbitrage 题解

    Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21300   Accepted: 9079 Descri ...

  5. poj 2240 Arbitrage (Floyd)

    链接:poj 2240 题意:首先给出N中货币,然后给出了这N种货币之间的兑换的兑换率. 如 USDollar 0.5 BritishPound 表示 :1 USDollar兑换成0.5 Britis ...

  6. POJ 2240 Arbitrage【Bellman_ford坑】

    链接: http://poj.org/problem?id=2240 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  7. POJ 2240 && ZOJ 1082 Arbitrage 最短路,c++ stl pass g++ tle 难度:0

    http://poj.org/problem?id=2240 用log化乘法为加法找正圈 c++ 110ms,g++tle #include <string> #include <m ...

  8. POJ 2240 Arbitrage(floyd)

    http://poj.org/problem?id=2240 题意 : 好吧,又是一个换钱的题:套利是利用货币汇率的差异进行的货币转换,例如用1美元购买0.5英镑,1英镑可以购买10法郎,一法郎可以购 ...

  9. poj 2240 Arbitrage (最短路 bellman_ford)

    题目:http://poj.org/problem?id=2240 题意:给定n个货币名称,给m个货币之间的汇率,求会不会增加 和1860差不多,求有没有正环 刚开始没对,不知道为什么用 double ...

随机推荐

  1. 数据库 查询第31-40行数据,ID不连续

    一.SQLServer 大致分为两种情况:ID连续和ID不连续. 1.ID连续的情况: select * from A where ID between 31 and 40 2.ID不连续的情况: ( ...

  2. Oracle 双机热备+双机冷备+负载均衡

    引用地址:https://wenku.baidu.com/view/7cca62f1ddccda38366baf7f.html SQL Server 2008 R2双机热备 引用地址:https:// ...

  3. Linux学习(五)远程登录

    Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器. 这时我们就需要远程登录到Linux服务器来管理维护系统. Linux系统中是通过ssh服务实现的远程登录功 ...

  4. Python Singleton Pattern(单例模式)

    简介 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 当 ...

  5. yii2-CaptchaAction macos500 不显示

    把公司一个项目pull到本地 发现验证码不输出了 怀疑是gd库没装  php -m看了下 gd库是装了的 有搜索到可能是因为自带的php拓展生成不了png(觉得不太可能) 试了下自己写一个图片生成pn ...

  6. pytest--配置

    说到配置,大家可能想到的是不经常更改的内容,比如Django里的settings.py文件,或者我们做自动化的时候,把测试环境的域名和正式环境的域名放到一个配置文件里,所有的接口都从这个文件里读取.这 ...

  7. chentos7 安装jdk1.8(二进制安装)

    首先下载jdk1.8 去官网下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.h ...

  8. Mac流程图的软件

    里面有破解机器,按照步骤一步步来就可以了 https://www.zhinin.com/omnigraffle_pro-mac.html

  9. class net.sf.cglib.core.DebuggingClassWriter overrides final method visit

    在使用CGLIB进行动态代理的时候,报了[java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter overrides f ...

  10. AJAX发送异步请求教程详解

    AJAX 一.AJAX简介 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可 ...