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- ...
随机推荐
- LOAP& its implimenlation
LDAP 概念 LDAP的英文全称是Lightweight Directory Access Protocol,简称为LDAP,LDAP是轻量目录访问协议,LDAP是轻量目录访问协议.简单的说来,LD ...
- laravel email markdown
laravel 邮件使用markdown php artisan make:mail lessonPublished --markdown="emails.published" 这 ...
- java入门之——对象转型
对象的类型转换是我们在编程的时候常常会遇到的,java平台也是如此.比方一些基本类型的数据转型和复合数据的转换. 举例 java语言中主要分为向上转型和向下转型,怎样来了解和掌握这两者转型的关系呢?首 ...
- JDBC基本应用
首先我们来看一下JDBC操作数据的核心: Connection 应用程序与数据库之间的桥梁 数据库驱动程序是构建桥梁的基石和材料 DriverManager类是基石和材料的管理员 Statement ...
- ubuntu下apache+mysql+php+mysql等之webserver搭建
相信非常多人跟我一样,想搭建一个自己的webserver.网上资料非常多.可是因为版本号的区别,总是存在依照一个教程来做无法全然实现的问题.近期我也折腾了好几天,google不能用,仅仅能百度,真想说 ...
- python 爬虫必知必会
#python爬虫 #新闻数据 #机器学习:股票数据获取及分析 #网络搜索引擎的一个部件 #Http协议 #正则表达式 #多线程,分布式 #http报文展示 #Http 应答报文介绍 #1.应答码 # ...
- Python开发【第*篇】【Socket网络编程】
1.Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. so ...
- 数据分析-excel基础篇
清洗处理类 主要针对文本.格式以及脏数据的清洗和转换. Trim 用于清除掉字符串两边的空格. MySQL有同名函数,Python有近似函数strip. =TRIM(目标单元格) Concatenat ...
- Mac SavePanel 保存文件的GUI代码
// Move the recorded temporary file to a user-specified location (视频文件另存储过程,依据用户选择的路径和文件保存名) NSSaveP ...
- android判断正在使用的网络类型 0.不知道网络类型;1、2G;2、3G;3、4g;4、wifi
判断正在使用的网络类型 0.不知道网络类型:1.2G:2.3G:3.4g:4.wifi /** Unknown network class. {@hide} */ public static fina ...