这题和以往的求最短路的题目略微有点不一样,以往求的都是最小的,这题求的是大的,而且还是乘法。

我们求的时候初始化的时候就要进行相反的初始化了,把它们初始化为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)的更多相关文章

  1. hdu 1217 Arbitrage (spfa算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217 题目大意:通过货币的转换,来判断是否获利,如果获利则输出Yes,否则输出No. 这里介绍一个ST ...

  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. HDU 1217 Arbitrage (Floyd)

    Arbitrage http://acm.hdu.edu.cn/showproblem.php?pid=1217 Problem Description Arbitrage is the use of ...

  4. hdu 1217 Arbitrage (最小生成树)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1217 /************************************************* ...

  5. HDU 1217 Arbitrage(Bellman-Ford判断负环+Floyd)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217 题目大意:问你是否可以通过转换货币从中获利 如下面这组样例: USDollar 0.5 Brit ...

  6. hdu 1217 Arbitrage(佛洛依德)

    Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  7. [ACM] hdu 1217 Arbitrage (bellman_ford最短路,推断是否有正权回路或Floyed)

    Arbitrage Problem Description Arbitrage is the use of discrepancies in currency exchange rates to tr ...

  8. hdu 1217 Arbitrage

    Flody多源最短路 #include<cstdio> #include<cstring> #include<string> #include<cmath&g ...

  9. HDU 1217 Arbitrage(Floyd的应用)

    给出一些国家之间的汇率,看看能否从中发现某些肮脏的......朋友交易. 这是Floyd的应用,dp思想,每次都选取最大值,最后看看自己跟自己的.....交易是否大于一.... #include< ...

  10. hdu 1217 (Floyd变形)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217 Arbitrage Time Limit: 2000/1000 MS (Java/Others)   ...

随机推荐

  1. APP为什么会被打回来??

    APP的设置界面, 按钮使用了类似iPhone的操作方式以及icon的圆角设计  ->  重新设计 APP的年龄设置太低  ->  改年龄 APP里有实物奖励  ->  免责声明, ...

  2. native-echarts 在安卓上无法显示出来

    1.native-echarts 的配置是百度echarts 2.模拟器上试了很多次都显示不出来(具体不清楚,我的是这样) 3.真机测试可以显示图表,以下是配置: a.将node_modules\na ...

  3. insert后面value可控的盲注(第一次代码审计出漏洞)

    这个叫诗龙的cms真的很感谢他的编写人,全站注入~~一些特别白痴的就不说了,这里有一个相对有点意思的 很明显的注入,然后去直接利用报错注入想爆出数据结果发现没有开报错模式. 报错注入http://ww ...

  4. python学习之内部函数:

    python内置函数表:https://docs.python.org/3/library/functions.html 1 判断数据类型的函数:isinstance(变量, 待要判断的类型) 2判断 ...

  5. [已读]JavaScript高级程序设计(第3版)

    从去年开始看,因为太长,总是没有办法一口气把它看完,再加上它与第二版大部分一致,读起来兴致会更缺一点. 与第二版相比,它最大的改变就是增加了很多html5的内容,譬如:Object对象的一些新东西,数 ...

  6. SSH的端口转发

    这里是一篇很好的介绍SSH PortForwarding的文章http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 可以将远端服务器一 ...

  7. 如何在spring环境中做单元测试

    在测试类的上方加入以下注解 @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:spring.xm ...

  8. docker镜像与容器

    目录 docker镜像与容器 概述 分层存储 镜像与容器 删除镜像与容器 将容器中的改动提交到镜像 慎用 docker commit--构建镜像推荐使用dockerfile docker镜像与容器 概 ...

  9. docker命令自动安装

    docker命令自动安装 操作 操作就是执行两句脚本 curl -fsSL get.docker.com -o get-docker.sh 这句命令会在当前文件夹下下载一个get-docker.sh的 ...

  10. LN : Eden Polymorphic And OOP Design Pattern Abstract Factory

    Appreciation to our TA, +7, who designed this task. Client.cpp #include <iostream> #include &l ...