http://poj.org/problem?id=2240

用log化乘法为加法找正圈

c++ 110ms,g++tle

  1. #include <string>
  2. #include <map>
  3. #include <iostream>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <queue>
  7. using namespace std;
  8. const int maxn = 50;
  9. bool vis[maxn];
  10. double chg[maxn][maxn];
  11. double dis[maxn];
  12. int e[maxn][maxn],deg[maxn];
  13. map<string,int> idmp;
  14. int n,m;
  15. const double inf = 0x3fffffff;
  16.  
  17. queue<int> que;
  18. bool hasloop(int s){
  19. while(!que.empty())que.pop();
  20. que.push(s);
  21. vis[s] = true;
  22. int cnt = 0;
  23. while(!que.empty()){
  24. cnt ++;
  25. s = que.front();que.pop();vis[s] = false;
  26. for(int i = 0;i < deg[s];i++)
  27. {
  28. int t = e[s][i];
  29. if(dis[t] < dis[s] + chg[s][t])
  30. {
  31. dis[t] = dis[s] + chg[s][t];
  32. que.push(t);
  33. vis[t] = true;
  34. }
  35. }
  36. if(cnt > n * n)return true;
  37. }
  38. return false;
  39. }
  40.  
  41. int main(){
  42. int ti = 0;
  43. while(cin>>n && n && ++ti){
  44. idmp.clear();
  45. for(int i = 0;i < n;i++)
  46. {
  47. dis[i] = -inf;
  48. for(int j = 0;j < n;j++)chg[i][j] = -inf;
  49. }
  50. memset(vis,false,sizeof vis);
  51. memset(deg,0,sizeof deg);
  52.  
  53. for(int i = 0;i < n;i++)
  54. {
  55. string tmp;
  56. cin>>tmp;
  57. idmp[tmp] = i;
  58. }
  59. cin>>m;
  60. for(int i = 0;i < m;i++)
  61. {
  62. string sf,st;
  63. double change;
  64. cin>>sf>>change>>st;
  65. change = log(change);
  66. int f = idmp[sf];
  67. int t = idmp[st];
  68. chg[f][t] = change;
  69. e[f][deg[f]++] = t;
  70. }
  71. bool fl = false;
  72. for(int i = 0;i < n;i++)
  73. {
  74. if(dis[i] == -inf){
  75. dis[i] = 1;
  76. if(hasloop(i)){
  77. fl = true;
  78. break;
  79. }
  80. }
  81. }
  82. cout << "Case " << ti << ": ";
  83. if(fl)cout << "Yes" <<endl;
  84. else cout << "No" << endl;
  85. }
  86. return 0;
  87. }

  

POJ 2240 && ZOJ 1082 Arbitrage 最短路,c++ stl pass g++ tle 难度:0的更多相关文章

  1. 最短路(Floyd_Warshall) POJ 2240 Arbitrage

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

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

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

  3. poj 2240 Arbitrage 题解

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

  4. poj 2240 Arbitrage (Floyd)

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

  5. poj 2449(A*求第K短路)

    题目链接:http://poj.org/problem?id=2449 思路:我们可以定义g[x]为源点到当前点的距离,h[x]为当前点到目标节点的最短距离,显然有h[x]<=h*[x](h*[ ...

  6. POJ 1562 && ZOJ 1709 Oil Deposits(简单DFS)

    题目链接 题意 : 问一个m×n的矩形中,有多少个pocket,如果两块油田相连(上下左右或者对角连着也算),就算一个pocket . 思路 : 写好8个方向搜就可以了,每次找的时候可以先把那个点直接 ...

  7. POJ 3076 / ZOJ 3122 Sudoku(DLX)

    Description A Sudoku grid is a 16x16 grid of cells grouped in sixteen 4x4 squares, where some cells ...

  8. poj 3100 (zoj 2818)||ZOJ 2829 ||ZOJ 1938 (poj 2249)

    水题三题: 1.给你B和N,求个整数A使得A^n最接近B 2. 输出第N个能被3或者5整除的数 3.给你整数n和k,让你求组合数c(n,k) 1.poj 3100 (zoj 2818) Root of ...

  9. POJ - 1062 昂贵的聘礼(最短路Dijkstra)

    昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u SubmitStatus Descr ...

随机推荐

  1. HDU5785 manacher+差分数组

    用manacher算法O(n)求出所有的回文半径.有了回文半径后,就可以求出L[i]表示以i结尾的回文串的起始位置的和R[i]表示以i起始的回文串的结尾位置的和,然后就可以求出答案了,这里要注意奇偶长 ...

  2. 高处胜寒 php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

    <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一 ...

  3. phpStorm如何在Console控制台执行php文本,而不是浏览器中

    如何在Console控制台执行php文本 phpStorm默认会在浏览器中执行脚本 默认的配置 配置PHP脚本 扩展,配置项目运行

  4. datatables使用

    //4.多列排序 //示例:http://www.guoxk.com/html/DataTables/Multi-column-sorting.html //5.隐藏某些列 $(document).r ...

  5. 使用Mozilla Firefox插件RestClient测试Http API接口

    RESTClient是Mozilla Firefox一个用于测试http请求插件.在火狐附加组件里面查询并安装,非常小巧,界面非常简单,使用非常的方便,看下面这张图你就全明白了,希望对新手有帮助! 1 ...

  6. about shell

    摘抄 cat 等 cat主要有三大功能:1.一次显示整个文件.$ cat   filename2.从键盘创建一个文件.$ cat  >  filename只能创建新文件,不能编辑已有文件.3.将 ...

  7. 【服务器环境搭建-Centos】Nginx1.9.9 配置启用 --待续

    1.worker_processes worker_processes 4;## 4核,所以设置4个 worker_cpu_affinity 0001 0010 0100 1000; nginx在启动 ...

  8. Android控件之EditText(输入文本框控件)

    一.EditText控件概述 EditText是一个非常重要的组件,可以说他是用户和Android应用进行数据传输窗口  有了他就等于有了一扇和Android应用传输的门,通过他用户可以把数据传输给A ...

  9. 5.3.1 新建Java工程和类

    1.新建工程 (1)打开Eclipse,选择工作区域 (2)选择“File”->“New”->“Java Project”命令,新建工程. (3)在弹出的新建工程对话框中,输入Projec ...

  10. VBA中find的一些使用方法

    用excel处理数据的时候,无论是使用VBA还是函数,查找和引用都是两大主要的工作,VBA中的find系列的方法(find.findnext.Range.FindPrevious)返回range对象, ...