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

用log化乘法为加法找正圈

c++ 110ms,g++tle

#include <string>
#include <map>
#include <iostream>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 50;
bool vis[maxn];
double chg[maxn][maxn];
double dis[maxn];
int e[maxn][maxn],deg[maxn];
map<string,int> idmp;
int n,m;
const double inf = 0x3fffffff;queue<int> que;
bool hasloop(int s){while(!que.empty())que.pop();que.push(s);vis[s] = true;int cnt = 0;while(!que.empty()){cnt ++;s = que.front();que.pop();vis[s] = false;for(int i = 0;i < deg[s];i++){int t = e[s][i];if(dis[t] < dis[s] + chg[s][t]){dis[t] = dis[s] + chg[s][t];que.push(t);vis[t] = true;}}if(cnt > n * n)return true;}return false;
}int main(){int ti = 0;while(cin>>n && n && ++ti){idmp.clear();for(int i = 0;i < n;i++){dis[i] = -inf;for(int j = 0;j < n;j++)chg[i][j] = -inf;}memset(vis,false,sizeof vis);memset(deg,0,sizeof deg);for(int i = 0;i < n;i++){string tmp;cin>>tmp;idmp[tmp] = i;}cin>>m;for(int i = 0;i < m;i++){string sf,st;double change;cin>>sf>>change>>st;change = log(change);int f = idmp[sf];int t = idmp[st];chg[f][t] = change;e[f][deg[f]++] = t;}bool fl = false;for(int i = 0;i < n;i++){if(dis[i] == -inf){dis[i] = 1;if(hasloop(i)){fl = true;break;}}}cout << "Case " << ti << ": ";if(fl)cout << "Yes" <<endl;else cout << "No" << endl;}return 0;
}

  

转载于:https://www.cnblogs.com/xuesu/p/4754667.html

POJ 2240 ZOJ 1082 Arbitrage 最短路,c++ stl pass g++ tle 难度:0相关推荐

  1. POJ 2240 HDU 1217 Arbitrage(Floyd)

    Description 给定一些货币之间的单向汇率,问一笔钱能否经过若干次对换而增值 Input 多组用例,每组用例第一行为货币种数n,之后n行为货币类型,第n+2行为兑换规则数m,之后m行为货币之间 ...

  2. I - Arbitrage POJ - 2240

    I - Arbitrage POJ - 2240 题意: 利用汇率之间的差价判断是否可以赚钱 思路: 利用 spfa 跑最长路(即松弛条件改为取更大的值),判断是否存在正环,存在则可以赚钱 #incl ...

  3. POJ 2240 Arbitrage(SPFA判正环)

    POJ 2240 Arbitrage 题目大意 套利是指利用货币汇率的差异,将一种货币的一个单位转换为同一货币的多个单位.例如,假设1美元买0.5英镑,1英镑买10.0法国法郎,1法国法郎买0.21美 ...

  4. poj 2240 Arbitrage (Floyd)

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

  5. POJ 2240 Arbitrage(最短路 套汇)

    题意  给你n种币种之间的汇率关系  推断是否能形成套汇现象  即某币种多次换为其他币种再换回来结果比原来多 基础的最短路  仅仅是加号换为了乘号 #include<cstdio> #in ...

  6. poj 2240 Arbitrage (floyd 变形)

    http://poj.org/problem?id=2240 floyd 的变形 题意 有n个货币,他们的交换情况m个 例如: 3 USDollar BritishPound FrenchFranc ...

  7. POJ 2240 Arbitrage(判正环)

    http://poj.org/problem?id=2240 题意: 货币兑换,判断最否是否能获利. 思路: 又是货币兑换题,Belloman-ford和floyd算法都可以的. 1 #include ...

  8. poj 2240 Arbitrage(bellman-ford spfa 判断正环)

    http://poj.org/problem?id=2240 基本和poj 1860相同 只是把单点变成了任意点 做完1860再做这题就完全把思路套上就过了 做完才发现网上的题解都用的是floyd 不 ...

  9. POJ 2240 Arbitrage

    这一题是一道比较好的最短路的变型题,大致思路是求得本身到本身的最短路,注意这一题路与路是相乘的关系,用floy的算法即可. AC code: View Code 1 #include <iost ...

最新文章

  1. SVM算法在项目实践中的应用!
  2. CAN总线基础(三)
  3. mysql5.0修改字符集,查看mysql字符集及修改表结构
  4. oracle中右击出现的含义,Oracle中经典的问题解决方案-Oracle
  5. zabiix监控磁盘io
  6. 《VMware Virtual SAN权威指南》一2.2.4 容量层设备
  7. android 设置PopupWindow的显示大小
  8. 自定义报表 java_报表为什么会没完没了?怎么解决这个问题?
  9. 蓝牙:深入浅出低功耗蓝牙(BLE)协议栈
  10. WCF系列之什么是WCF
  11. 国内国外最好的java开发论坛及站点 [转]
  12. 面试鹅厂,我被虐的体无完肤。。。
  13. VScode远程连接linux
  14. unity 阳光插件_【复盘】Environmental Composition初尝试总结(附实用插件推荐)
  15. 数据挖掘之数据仓库详述
  16. 路由器玩机---老毛子设置AP与主路由设置
  17. 关系代数表达式_英语学数学 | 英语学代数XYZ,一样很简单
  18. ActiveSync同步使用方法
  19. ios 图片加载内存尺寸_iOS图片内存优化
  20. FFmpeg从视频中提取音频

热门文章

  1. 线程的生命周期及五种基本状态介绍
  2. Sentinel实现黑白名单控制详细教程来了
  3. 不要在foreach循环里进行元素的remove/add操作。remove元素请使用iteratot方式,如果并发操作,需要对Iterator对象加锁
  4. 蜗杆参数法设计_齿轮几何尺寸设计,很实用的Excel表格(附自动计算表格)
  5. 系统开发基础:UML相关知识笔记
  6. 霸榜Github第一!谷歌重磅开源的“海啸”,我服了
  7. MVC实现实现文件流打包成压缩包
  8. mysql查询语句详解_基于mysql查询语句的使用详解
  9. ux设计_UX设计101:
  10. figma下载_Figma和ProtoPie中的原型制作,比较