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 ...
随机推荐
- 【BZOJ4524】[Cqoi2016]伪光滑数 堆(模拟搜索)
[BZOJ4524][Cqoi2016]伪光滑数 Description 若一个大于1的整数M的质因数分解有k项,其最大的质因子为Ak,并且满足Ak^K<=N,Ak<128,我们就称整数M ...
- Ensemble Learning
Ensemble Learning是机器学习里最常见的建模方法,RandomForest 和 GBDT 采用了Ensemble Learning模式,只是具体方法不同. 下面简单翻译下一 https: ...
- CodeForces 19B Checkout Assistant
B. Checkout Assistant time limit per test 1 second memory limit per test 256 megabytes input standar ...
- Puppet学习:Augeas的怪问题
今天测试部署Zabbix,本来以前是正常的,今天莫名其妙报错.测试后发现是Augeas出现问题,无论如何都不执行.于是采用调试模式: puppet agent --test --verbose --d ...
- 十六.MySQL存储过程
1.创建一个没有参数的存储过程 CREATE PROCEDURE sp1() SELECT VERSION(); 调用存储过程:CALL sp1(); 2.带有IN参数的存储过程 CREATE PRO ...
- 我希望知道的关于Django的11件事(转)
英文原文:https://medium.com/cs-math/f29f6080c131 译文:http://my.oschina.net/chenlei123/blog/270672 两年前, 我开 ...
- JS事件常用事件
oncontextmenu对象右击 举例1: <form id="form1" name="form1" method="post" ...
- 表单(下)-EasyUI Spinner 微调器、EasyUI Numberspinner 数值微调器、EasyUI Timespinner 时间微调器、EasyUI Slider 滑块
EasyUI Spinner 微调器 扩展自 $.fn.validatebox.defaults.通过 $.fn.spinner.defaults 重写默认的 defaults. 微调器(spinne ...
- redis客户端hiredis
Hiredis 在官网 http://redis.io/clients 中有说明This is the official C client. Support for the whole command ...
- xml转为array
PHP实现微信支付,微信支付宝返回的xml结果如下: <xml> <appid><![CDATA[wx2421b1c4370ec43b]]></appid ...