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(判正环)的更多相关文章

  1. POJ - 1860 Bellman-Ford判正环

    心累,陕西邀请赛学校不支持,可能要自费了.. 思路:套用Bellman-Ford判断负环的思路,把大于改成小于即可判定是否存在从源点能到达的正环.如果存在正环,那么完全多跑几次正环就可以把钱增加到足够 ...

  2. POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环)

    POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环) Description Arbi ...

  3. 最短路(Floyd_Warshall) POJ 2240 Arbitrage

    题目传送门 /* 最短路:Floyd模板题 只要把+改为*就ok了,热闹后判断d[i][i]是否大于1 文件输入的ONLINE_JUDGE少写了个_,WA了N遍:) */ #include <c ...

  4. poj 2240 Arbitrage 题解

    Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21300   Accepted: 9079 Descri ...

  5. POJ 2240 Arbitrage (Bellman Ford判正环)

    Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:27167   Accepted: 11440 Descri ...

  6. POJ 2240 Arbitrage spfa 判正环

    d[i]代表从起点出发可以获得最多的钱数,松弛是d[v]=r*d[u],求最长路,看有没有正环 然后这题输入有毒,千万别用cin 因为是大输入,组数比较多,然后找字符串用strcmp就好,千万不要用m ...

  7. POJ 2240 Arbitrage Bellman_ford 判读是否存在正环

    和POJ1860差不多,就是用bellmanford判读是否存在正环,注意的是同种货币之间也可以交换,就是说:A货币换A货币汇率是2的情况也是存在的. #include<stdio.h> ...

  8. POJ 1860——Currency Exchange——————【最短路、SPFA判正环】

    Currency Exchange Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u S ...

  9. POJ 3621 Sightseeing Cows 【01分数规划+spfa判正环】

    题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS   Memory Limit: 65536K Total ...

  10. POJ 2240 Arbitrage【Bellman_ford坑】

    链接: http://poj.org/problem?id=2240 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

随机推荐

  1. 启动Solr时报 _version_ field must exist in schema 错误的解决方法

    Solr启动时报 org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Unable to use up ...

  2. 使用SSH工具连接到MySQL

    在SSH中查看MySQL数据信息 格式为:mysql -h主机地址 -u用户名 -p用户密码 -P端口号 -D数据库名称 例如: mysql -uroot -p123456 -h192.168.1.1 ...

  3. 网络费用流-最小k路径覆盖

    多校联赛第一场(hdu4862) Jump Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  4. Iterator 和 Iterable 区别和联系

    首先预览下Java源码中的Iterator和Iterable: Iterable接口: public interface Iterable<T> {//这里只摘录接口中的抽象方法 /** ...

  5. android的一些类库的优缺点

    经过本人的面试经验,以及接触的android项目,总结了一下android的一些类库的优缺点: 一,线程方面 1.AsyncTask 首先是线程优化以及缺陷方面,针对目前大多数类库来说,都有好的设计方 ...

  6. Kafka Consumer接口

    对于kafka的consumer接口,提供两种版本,   high-level 一种high-level版本,比较简单不用关心offset, 会自动的读zookeeper中该Consumer grou ...

  7. 【css flex】将多个<div>放在同一行

    使用style里的flex属性 默认情况下,一个div独占一行 使用css选择器给外层div加上以下flex属性,则该div的子div可以在同一行中显示, .runs-paginator-flex-c ...

  8. 洛谷P3067 平衡的奶牛群 [USACO12OPEN] meet-in-the-middle

    正解:搜索 解题报告: 先放下传送门QwQ 这题就,双向搜索经典题鸭 首先dfs应该挺好想到的我jio得?就是我们不用记录左右分别得分多少只要记下差值就好了嘛能get? 然后就先搜左边,记录下每个得分 ...

  9. Day19 客户关系系统实战

    day19 今日内容 Service事务 客户关系管理系统     Service事务 在Service中使用ThreadLocal来完成事务,为将来学习Spring事务打基础! 1 DAO中的事务 ...

  10. 【生产问题】write log 引起系统卡死,业务全部阻塞

    解决办法:https://www.sqlskills.com/help/waits/writelog/ [生产问题]write log 引起系统卡死,业务全部阻塞 writelog不成功不作数的,所以 ...