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 ...
随机推荐
- 解决Chrome关联Html文件图标显示为空白
用记事本保存为ChromeHTML.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\CLSID\{42042206-2D85-1 ...
- 服务器报错 500,请确保 ASP.NET State Service(ASP.NET 状态服务)已启动
报错信息: 解决方案: 开启此服务
- [Android Tips] 31.如何将第三库引入的 Permission 删除掉
Just declare the incriminated permission in your (main) Manifest with the tools:node="remove&qu ...
- 精通linux设备驱动开发 笔记
3.2.7 错误处理 #include <linux/err.h> char * collect_data(char *userbuffer) { char *buffer; /* ...
- With all Java versions it is strongly recommended to not use experimental -XX JVM options.
https://lucene.apache.org/solr/7_6_0//SYSTEM_REQUIREMENTS.html System Requirements Apache Solr runs ...
- talib 中文文档(十一):Cycle Indicator Functions 周期指标
Cycle Indicator Functions 不是很懂,欢迎指教 HT_DCPERIOD - Hilbert Transform - Dominant Cycle Period 函数名:HT_D ...
- 如何修改git分支名名称
1. 修改本地git分支名称指令 git branch -m oldBranchName newBranchName 2. 修改远程仓库(github)上的分支名称 git本地分支名已修改,只需推送到 ...
- HTTP 请求头中的 X-Forwarded-For(转)
原文:https://imququ.com/post/x-forwarded-for-header-in-http.html 我一直认为,对于从事 Web 前端开发的同学来说,HTTP 协议以及其他常 ...
- 从零开始写JavaWeb框架(第二章节)
这一章太多了...好累,不想写那么细了,就做一点总结吧. package org.smart4j.chapter2.controller; import java.io.IOException; im ...
- Keras-图片预处理
图片预处理 图片生成器ImageDataGenerator keras.preprocessing.image.ImageDataGenerator(featurewise_center=False, ...