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 <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相关推荐
- POJ 2240 HDU 1217 Arbitrage(Floyd)
Description 给定一些货币之间的单向汇率,问一笔钱能否经过若干次对换而增值 Input 多组用例,每组用例第一行为货币种数n,之后n行为货币类型,第n+2行为兑换规则数m,之后m行为货币之间 ...
- I - Arbitrage POJ - 2240
I - Arbitrage POJ - 2240 题意: 利用汇率之间的差价判断是否可以赚钱 思路: 利用 spfa 跑最长路(即松弛条件改为取更大的值),判断是否存在正环,存在则可以赚钱 #incl ...
- POJ 2240 Arbitrage(SPFA判正环)
POJ 2240 Arbitrage 题目大意 套利是指利用货币汇率的差异,将一种货币的一个单位转换为同一货币的多个单位.例如,假设1美元买0.5英镑,1英镑买10.0法国法郎,1法国法郎买0.21美 ...
- poj 2240 Arbitrage (Floyd)
链接:poj 2240 题意:首先给出N中货币,然后给出了这N种货币之间的兑换的兑换率. 如 USDollar 0.5 BritishPound 表示 :1 USDollar兑换成0.5 Britis ...
- POJ 2240 Arbitrage(最短路 套汇)
题意 给你n种币种之间的汇率关系 推断是否能形成套汇现象 即某币种多次换为其他币种再换回来结果比原来多 基础的最短路 仅仅是加号换为了乘号 #include<cstdio> #in ...
- poj 2240 Arbitrage (floyd 变形)
http://poj.org/problem?id=2240 floyd 的变形 题意 有n个货币,他们的交换情况m个 例如: 3 USDollar BritishPound FrenchFranc ...
- POJ 2240 Arbitrage(判正环)
http://poj.org/problem?id=2240 题意: 货币兑换,判断最否是否能获利. 思路: 又是货币兑换题,Belloman-ford和floyd算法都可以的. 1 #include ...
- poj 2240 Arbitrage(bellman-ford spfa 判断正环)
http://poj.org/problem?id=2240 基本和poj 1860相同 只是把单点变成了任意点 做完1860再做这题就完全把思路套上就过了 做完才发现网上的题解都用的是floyd 不 ...
- POJ 2240 Arbitrage
这一题是一道比较好的最短路的变型题,大致思路是求得本身到本身的最短路,注意这一题路与路是相乘的关系,用floy的算法即可. AC code: View Code 1 #include <iost ...
最新文章
- SVM算法在项目实践中的应用!
- CAN总线基础(三)
- mysql5.0修改字符集,查看mysql字符集及修改表结构
- oracle中右击出现的含义,Oracle中经典的问题解决方案-Oracle
- zabiix监控磁盘io
- 《VMware Virtual SAN权威指南》一2.2.4 容量层设备
- android 设置PopupWindow的显示大小
- 自定义报表 java_报表为什么会没完没了?怎么解决这个问题?
- 蓝牙:深入浅出低功耗蓝牙(BLE)协议栈
- WCF系列之什么是WCF
- 国内国外最好的java开发论坛及站点 [转]
- 面试鹅厂,我被虐的体无完肤。。。
- VScode远程连接linux
- unity 阳光插件_【复盘】Environmental Composition初尝试总结(附实用插件推荐)
- 数据挖掘之数据仓库详述
- 路由器玩机---老毛子设置AP与主路由设置
- 关系代数表达式_英语学数学 | 英语学代数XYZ,一样很简单
- ActiveSync同步使用方法
- ios 图片加载内存尺寸_iOS图片内存优化
- FFmpeg从视频中提取音频
热门文章
- 线程的生命周期及五种基本状态介绍
- Sentinel实现黑白名单控制详细教程来了
- 不要在foreach循环里进行元素的remove/add操作。remove元素请使用iteratot方式,如果并发操作,需要对Iterator对象加锁
- 蜗杆参数法设计_齿轮几何尺寸设计,很实用的Excel表格(附自动计算表格)
- 系统开发基础:UML相关知识笔记
- 霸榜Github第一!谷歌重磅开源的“海啸”,我服了
- MVC实现实现文件流打包成压缩包
- mysql查询语句详解_基于mysql查询语句的使用详解
- ux设计_UX设计101:
- figma下载_Figma和ProtoPie中的原型制作,比较