HDU-1217-Arbitrage(SPFA)
这题和以往的求最短路的题目略微有点不一样,以往求的都是最小的,这题求的是大的,而且还是乘法。
我们求的时候初始化的时候就要进行相反的初始化了,把它们初始化为0,然后比较大的就更新。
因为这题的点少边多,所以spfa会比较好,我们对于每种货币都跑一遍,如果其中任何货币的从它到它的路,即d[start]大于1,就说明可以升值。
还有边是单向边,因为货币兑换在题目输入的意思是单向的。
d[start]的初始值为1,用map 的时候,记得清空,不然反复使用可能会错。
#include <cstdio>
#include <queue>
#include <map>
using namespace std;
map<string, int> mp;
double trip[35][35], d[35], k;
char s1[105], s2[105];
int n, m, c = 1;
int vis[35];
int SPFA(int s)
{
queue<int> q;
for (int i = 0; i < 35;i++)
vis[i] = d[i] = 0;
d[s] = 1.0;
vis[s] = 1;
q.push(s);
while (!q.empty()) {
int now = q.front();
q.pop();
vis[now] = 0;
for (int i = 1; i <= n;i++) {
if (d[now]*trip[now][i]>d[i]) {
d[i] = d[now] * trip[now][i];
if (d[s]>1.0)
return 1;
if (!vis[i]) {
q.push(i);
vis[i] = 1;
}
}
}
}
return 0;
}
int main()
{
while (scanf("%d",&n)&&n) {
mp.clear();
for (int i = 1; i <= n;i++) {
scanf("%s", s1);
mp[s1] = i;
}
scanf("%d", &m);
for (int i = 0; i < 35;i++)
trip[i][i] = 1.0;
for (int i = 0; i < m;i++) {
scanf("%s%lf%s", s1, &k, s2);
trip[mp[s1]][mp[s2]] = k;
}
int flag = 0;
for (int i = 1; i <= n;i++) {
if (SPFA(i)) {
flag = 1;
break;
}
}
printf("Case %d: %s\n",c++,flag?"Yes":"No");
}
return 0;
}
HDU-1217-Arbitrage(SPFA)的更多相关文章
- hdu 1217 Arbitrage (spfa算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217 题目大意:通过货币的转换,来判断是否获利,如果获利则输出Yes,否则输出No. 这里介绍一个ST ...
- POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环)
POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环) Description Arbi ...
- HDU 1217 Arbitrage (Floyd)
Arbitrage http://acm.hdu.edu.cn/showproblem.php?pid=1217 Problem Description Arbitrage is the use of ...
- hdu 1217 Arbitrage (最小生成树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1217 /************************************************* ...
- HDU 1217 Arbitrage(Bellman-Ford判断负环+Floyd)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217 题目大意:问你是否可以通过转换货币从中获利 如下面这组样例: USDollar 0.5 Brit ...
- hdu 1217 Arbitrage(佛洛依德)
Arbitrage Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- [ACM] hdu 1217 Arbitrage (bellman_ford最短路,推断是否有正权回路或Floyed)
Arbitrage Problem Description Arbitrage is the use of discrepancies in currency exchange rates to tr ...
- hdu 1217 Arbitrage
Flody多源最短路 #include<cstdio> #include<cstring> #include<string> #include<cmath&g ...
- HDU 1217 Arbitrage(Floyd的应用)
给出一些国家之间的汇率,看看能否从中发现某些肮脏的......朋友交易. 这是Floyd的应用,dp思想,每次都选取最大值,最后看看自己跟自己的.....交易是否大于一.... #include< ...
- hdu 1217 (Floyd变形)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217 Arbitrage Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- IT兄弟连 JavaWeb教程 JSP内置对象3
读取web.xml配置信息的config对象 config对象主要用于取得服务器的配置信息.通过pageContxt对象的getServletConfig()方法获取一个config对象.当一个Ser ...
- js中 call() ,apply(),bing()方法三者的用法和区别
面试中经常会被问到的,或者做笔试题的时候也会有这样的问题,所以今天专门对这个问题做个总结: 先看个例子: var age = '19' var myObj = { name:'小赖', myAge:t ...
- boot接入elasticsearch
boot接入elasticsearch 参考博客:https://blog.csdn.net/li521wang/article/details/83792552 项目源码demo:https://g ...
- C 语言实例 - 计算 int, float, double 和 char 字节大小
C 语言实例 - 计算 int, float, double 和 char 字节大小 C 语言实例 C 语言实例 使用 sizeof 操作符计算int, float, double 和 char四种变 ...
- (转)java 线程同步
转自 http://blog.csdn.net/column/details/java-thread.html http://leo-faith.iteye.com/blog/177779 http: ...
- seq(2018.10.24)
一道\(dp\)题... 期望\(40\)分解法 预处理:离散化,然后让连续一段值相同的元素合并为一个元素. 正式\(DP\): 显然有个最差策略为每个元素处都切一次,则切的次数为元素的个数\(-1\ ...
- python模块之hmac
# hmac模块使用步骤: # hmac模块模块的使用步骤与hashlib模块的使用步骤基本一致,只是在第1步获取hmac对象时,只能使用hmac.new()函数, # 因为hmac模块没有提供与具体 ...
- Windows如何利用输入法简单的打出 ‘↑’ ‘↓’ ‘↖’等箭头
‘↑’ shang ‘↓’ xia ‘←’ zuo ‘→’ you ‘↖’ zuoshang ‘↙’ zuoxia ‘↗’ youshang ‘↘’ youxia
- ZOJ Course Selection System DP
http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5565 Course Selection System Time ...
- Java生成-zipf分布的数据集(自定义倾斜度,用作spark data skew测试)
1.代码 import java.io.Serializable; import java.util.NavigableMap; import java.util.Random; import jav ...