POJ 2240 Arbitrage(判正环)
http://poj.org/problem?id=2240
题意:
货币兑换,判断最否是否能获利。
思路:
又是货币兑换题,Belloman-ford和floyd算法都可以的。
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<map>
using namespace std; const int maxn = + ; int n, m;
string s1,s2; map<string, int> p; struct
{
int u, v;
double rate;
}edge[maxn]; double d[]; bool bellman(int s)
{
memset(d, , sizeof(d));
d[s] = ;
for (int i = ; i < n; i++)
{
bool flag = false;
for (int j = ; j < m; j++)
{
if (d[edge[j].v] < d[edge[j].u] * edge[j].rate)
{
d[edge[j].v] = d[edge[j].u] * edge[j].rate;
flag = true;
}
}
if (!flag) break;
}
for (int j = ; j < m; j++)
if(d[edge[j].v] < d[edge[j].u] * edge[j].rate)
return true;
return false;
} int main()
{
ios::sync_with_stdio(false);
//freopen("D:\\txt.txt", "r", stdin);
double r;
int kase = ;
while (~scanf("%d", &n) && n)
{
for (int i = ; i < n; i++)
{
cin >> s1;
p[s1] = i;
}
scanf("%d", &m);
for (int i = ; i < m; i++)
{
cin >> s1 >> r >> s2;
edge[i].u = p[s1];
edge[i].v = p[s2];
edge[i].rate = r;
}
printf("Case %d: ", ++kase);
bool flag = false;
for (int i = ; i < n; i++)
{
if (bellman(i))
{
printf("Yes\n");
flag = true;
break;
}
}
if (!flag)
printf("No\n");
}
return ;
}
Belloman-ford
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<map>
using namespace std; const int maxn = + ;
const int INF = ; int n, m;
string s1,s2; map<string, int> p; double d[maxn][maxn]; void floyd()
{
for (int k = ; k < n; k++)
for (int i = ; i < n; i++)
for (int j = ; j < n; j++)
d[i][j] = max(d[i][j], d[i][k] * d[k][j]);
} int main()
{
ios::sync_with_stdio(false);
//freopen("D:\\txt.txt", "r", stdin);
double r;
int kase = ;
while (~scanf("%d", &n) && n)
{
memset(d, INF, sizeof(d));
for (int i = ; i < n; i++)
{
cin >> s1;
p[s1] = i;
d[i][i] = ; //一开始的汇率为1
}
scanf("%d", &m);
for (int i = ; i < m; i++)
{
cin >> s1 >> r >> s2;
d[p[s1]][p[s2]] = r;
}
floyd();
printf("Case %d: ", ++kase);
bool flag = false;
for (int i = ; i < n; i++)
{
if (d[i][i]>) //如果自身汇率大于1,说明可以套利
{
printf("Yes\n");
flag = true;
break;
}
}
if (!flag)
printf("No\n");
}
return ;
}
floyd
POJ 2240 Arbitrage(判正环)的更多相关文章
- POJ - 1860 Bellman-Ford判正环
心累,陕西邀请赛学校不支持,可能要自费了.. 思路:套用Bellman-Ford判断负环的思路,把大于改成小于即可判定是否存在从源点能到达的正环.如果存在正环,那么完全多跑几次正环就可以把钱增加到足够 ...
- POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环)
POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环) Description Arbi ...
- 最短路(Floyd_Warshall) POJ 2240 Arbitrage
题目传送门 /* 最短路:Floyd模板题 只要把+改为*就ok了,热闹后判断d[i][i]是否大于1 文件输入的ONLINE_JUDGE少写了个_,WA了N遍:) */ #include <c ...
- poj 2240 Arbitrage 题解
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21300 Accepted: 9079 Descri ...
- POJ 2240 Arbitrage (Bellman Ford判正环)
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions:27167 Accepted: 11440 Descri ...
- POJ 2240 Arbitrage spfa 判正环
d[i]代表从起点出发可以获得最多的钱数,松弛是d[v]=r*d[u],求最长路,看有没有正环 然后这题输入有毒,千万别用cin 因为是大输入,组数比较多,然后找字符串用strcmp就好,千万不要用m ...
- POJ 2240 Arbitrage Bellman_ford 判读是否存在正环
和POJ1860差不多,就是用bellmanford判读是否存在正环,注意的是同种货币之间也可以交换,就是说:A货币换A货币汇率是2的情况也是存在的. #include<stdio.h> ...
- POJ 1860——Currency Exchange——————【最短路、SPFA判正环】
Currency Exchange Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u S ...
- POJ 3621 Sightseeing Cows 【01分数规划+spfa判正环】
题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total ...
- POJ 2240 Arbitrage【Bellman_ford坑】
链接: http://poj.org/problem?id=2240 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
随机推荐
- 启动Solr时报 _version_ field must exist in schema 错误的解决方法
Solr启动时报 org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Unable to use up ...
- 使用SSH工具连接到MySQL
在SSH中查看MySQL数据信息 格式为:mysql -h主机地址 -u用户名 -p用户密码 -P端口号 -D数据库名称 例如: mysql -uroot -p123456 -h192.168.1.1 ...
- 网络费用流-最小k路径覆盖
多校联赛第一场(hdu4862) Jump Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- Iterator 和 Iterable 区别和联系
首先预览下Java源码中的Iterator和Iterable: Iterable接口: public interface Iterable<T> {//这里只摘录接口中的抽象方法 /** ...
- android的一些类库的优缺点
经过本人的面试经验,以及接触的android项目,总结了一下android的一些类库的优缺点: 一,线程方面 1.AsyncTask 首先是线程优化以及缺陷方面,针对目前大多数类库来说,都有好的设计方 ...
- Kafka Consumer接口
对于kafka的consumer接口,提供两种版本, high-level 一种high-level版本,比较简单不用关心offset, 会自动的读zookeeper中该Consumer grou ...
- 【css flex】将多个<div>放在同一行
使用style里的flex属性 默认情况下,一个div独占一行 使用css选择器给外层div加上以下flex属性,则该div的子div可以在同一行中显示, .runs-paginator-flex-c ...
- 洛谷P3067 平衡的奶牛群 [USACO12OPEN] meet-in-the-middle
正解:搜索 解题报告: 先放下传送门QwQ 这题就,双向搜索经典题鸭 首先dfs应该挺好想到的我jio得?就是我们不用记录左右分别得分多少只要记下差值就好了嘛能get? 然后就先搜左边,记录下每个得分 ...
- Day19 客户关系系统实战
day19 今日内容 Service事务 客户关系管理系统 Service事务 在Service中使用ThreadLocal来完成事务,为将来学习Spring事务打基础! 1 DAO中的事务 ...
- 【生产问题】write log 引起系统卡死,业务全部阻塞
解决办法:https://www.sqlskills.com/help/waits/writelog/ [生产问题]write log 引起系统卡死,业务全部阻塞 writelog不成功不作数的,所以 ...