poj2240 Arbitrage
思路:
有向图判负环。
实现:
(1)spfa
- #include <iostream>
- #include <map>
- #include <string>
- #include <cmath>
- #include <queue>
- using namespace std;
- const int INF = 0x3f3f3f3f;
- const int MAXN = ;
- double G[MAXN][MAXN], d[MAXN];
- bool in[MAXN];
- int n, m, num[MAXN];
- bool spfa(int s)
- {
- queue<int> q;
- d[s] = ;
- q.push(s);
- in[s] = true;
- while (!q.empty())
- {
- int tmp = q.front(); q.pop();
- in[tmp] = false;
- for (int i = ; i <= n; i++)
- {
- if (d[tmp] + G[tmp][i] < d[i])
- {
- d[i] = d[tmp] + G[tmp][i];
- if (!in[i]) { in[i] = true; q.push(i); }
- num[i]++;
- if (num[i] > n) return true;
- }
- }
- }
- return false;
- }
- int main()
- {
- map<string, int> mp;
- string s, t;
- double x;
- int Kase = ;
- while (cin >> n, n)
- {
- for (int i = ; i <= n; i++)
- {
- for (int j = ; j <= n; j++)
- {
- G[i][j] = INF;
- }
- }
- fill(d, d + n + , INF);
- fill(in, in + n + , );
- fill(num, num + n + , );
- mp.clear();
- for (int i = ; i <= n; i++)
- {
- cin >> s;
- mp[s] = i;
- }
- cin >> m;
- for (int i = ; i <= m; i++)
- {
- cin >> s >> x >> t;
- G[mp[s]][mp[t]] = -log(x);
- }
- for (int i = ; i <= n; i++) G[][i] = ;
- cout << "Case " << Kase++ << ": ";
- if (spfa()) cout << "Yes" << endl;
- else cout << "No" << endl;
- }
- return ;
- }
(2)floyd
- #include <iostream>
- #include <map>
- #include <string>
- #include <cmath>
- using namespace std;
- const int INF = 0x3f3f3f3f;
- const int MAXN = ;
- double G[MAXN][MAXN];
- int n, m;
- int main()
- {
- map<string, int> mp;
- string s, t;
- double x;
- int Kase = ;
- while (cin >> n, n)
- {
- for (int i = ; i <= n; i++)
- {
- for (int j = ; j <= n; j++)
- {
- if (i == j) G[i][j] = ;
- else G[i][j] = INF;
- }
- }
- mp.clear();
- for (int i = ; i <= n; i++)
- {
- cin >> s;
- mp[s] = i;
- }
- cin >> m;
- for (int i = ; i <= m; i++)
- {
- cin >> s >> x >> t;
- G[mp[s]][mp[t]] = -log(x);
- }
- for (int k = ; k <= n; k++)
- {
- for (int i = ; i <= n; i++)
- {
- for (int j = ; j <= n; j++)
- {
- if (G[i][k] + G[k][j] < G[i][j])
- G[i][j] = G[i][k] + G[k][j];
- }
- }
- }
- bool flg = false;
- for (int i = ; i <= n; i++)
- {
- if (G[i][i] < ) { flg = true; break; }
- }
- cout << "Case " << Kase++ << ": ";
- if (flg) cout << "Yes" << endl;
- else cout << "No" << endl;
- }
- return ;
- }
poj2240 Arbitrage的更多相关文章
- POJ-2240 Arbitrage BellmanFord查可循环圈
题目链接:https://cn.vjudge.net/problem/POJ-2240 题意 套利(Arbitrage)就是通过不断兑换外币,使得自己钱变多的行为 给出一些汇率 问能不能套利 思路 马 ...
- poj-------(2240)Arbitrage(最短路)
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15640 Accepted: 6563 Descri ...
- POJ2240——Arbitrage(Floyd算法变形)
Arbitrage DescriptionArbitrage is the use of discrepancies in currency exchange rates to transform o ...
- POJ-2240 -Arbitrage(Bellman)
题目链接:Arbitrage 让这题坑了,精度损失的厉害.用赋值的话.直接所有变成0.00了,无奈下,我仅仅好往里输了,和POJ1860一样找正环,代码也差点儿相同,略微改改就能够了,可是这个题精度损 ...
- POJ2240 Arbitrage(Floyd判负环)
跑完Floyd后,d[u][u]就表示从u点出发可以经过所有n个点回到u点的最短路,因此只要根据数组对角线的信息就能判断是否存在负环. #include<cstdio> #include& ...
- POJ2240 Arbitrage(最短路)
题目链接. 题意: 根据汇率可以将一种金币换成其他的金币,求最后能否赚到比原来更多的金币. 分析: 最短路的求法,用floyd. #include <iostream> #include ...
- poj2240 - Arbitrage(汇率问题,floyd)
题目大意: 给你一个汇率图, 让你判断能否根据汇率盈利 #include <iostream> #include <cstdlib> #include <cstdio&g ...
- 一步一步深入理解Dijkstra算法
先简单介绍一下最短路径: 最短路径是啥?就是一个带边值的图中从某一个顶点到另外一个顶点的最短路径. 官方定义:对于内网图而言,最短路径是指两顶点之间经过的边上权值之和最小的路径. 并且我们称路径上的第 ...
- poj图论解题报告索引
最短路径: poj1125 - Stockbroker Grapevine(多源最短路径,floyd) poj1502 - MPI Maelstrom(单源最短路径,dijkstra,bellman- ...
随机推荐
- Eclipse-Java代码规范和质量检查插件-SonarLint
SonarQube(Sonar)之前的提供的本地工具是需要依赖SonarQube服务器的,这样导致其运行速度缓慢. 新出的SonarLint的扫描引擎直接安装在本地,速度超快,实时探测代码技术债务,给 ...
- 【SSH 基础】浅谈Hibernate--入门篇
Hibernate是什么 Hibernate是一个轻量级的ORMapping框架 ORMapping原理(Object Relational Mapping)就是把对象里面的数据和数据库里面的数据,依 ...
- datagrid行操作
//获取第一个被选中的行 var row=$('#dg').datagrid('getSelected'); //获取行对应的索引值 var index=$('#dg').datagrid('getR ...
- FineUI之使用SQL脚本从数据库表中生成对应的输入控件
在WEB开发时.常常须要根据数据库表中的字段建立对应的输入控件,来获取输入的数据.每次都须要按字段来敲,显然太低效.并且easy出错.这里提供一个SQL脚本生成对应输入控件的方法. USE DBDem ...
- HDU Today HDU杭电2112【Dijkstra || SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=2112 Problem Description 经过锦囊相助,海东集团最终度过了危机,从此.HDU的发展就一直顺风 ...
- mysql链接 及备份
服务器数据库命令:mysql -usparks -pi6K1yRWUQVaIR79Z5vG1 -hrm-bp13z51p96xdax6i0.mysql.rds.aliyuncs.com 服务器数据库备 ...
- 【bzoj3124】[Sdoi2013]直径
1.求树的直径: 先随便取一个点,一遍dfs找到离它最远的点l1,再以l1为起点做一遍dfs,找到离l1最远的点l2 那么l1到l2的距离即为直径 2. 求出有多少条边在这棵树的所有直径上: ...
- initial ram disk
1 什么是initial ram disk 它就是一个做好了的文件系统,其存储空间是ram.在kernel启动的第一个阶段,会被mount成根文件系统. 2 为什么需要initial ram disk ...
- win下IE设置
当win7系统时需要升级IE为11版本,需要先安装sp1版本补丁,再装IE11,若还是装不了,可借助第三方平台(电脑管家等)升级安装.或 更新系统再安装IE11 https://jingyan.bai ...
- 扩展欧几里得模板&逆元求法
拓展欧几里得: 当 gcd ( a , b )= d 时,求绝对值和最小的 x , y 使得 x * a + y * b = d : d = gcd ( a , b ) = gcd ( b , a m ...