HDU 1217 Arbitrage(floyd)
来源:互联网 发布:oracle倒入sql文件 编辑:程序博客网 时间:2024/05/22 06:10
题目链接:
http://acm.split.hdu.edu.cn/showproblem.php?pid=1217
题意:
给出一些货币的汇率,求能不能套利润。
题解:
此题可以转化为求最短路,只是最短路的求法变成了乘法,而且此题不可以使用dijstra,因为<1时就相当于加法里的负权环了,还要注意使用floyd时不可以加上i!=j!=k的条件,因为最后是要回到原点的。
AC代码:
#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <map>#include <string>using namespace std;double dist[50][50];int n,m,cnt;double w;map <string, int> money;void floyd(){ for(int k = 0; k < n; k++) for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) if(dist[i][k] * dist[k][j] > dist[i][j]) dist[i][j] = dist[i][k] * dist[k][j];}int main(){ cnt = 1; while(~scanf("%dist", &n)) { if(n == 0)break; string a,u,v; int b,c; for(int i = 0; i < n; i++) { cin >> a; money[a] = i; } for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(i == j) dist[i][j] = 1; else dist[i][j] = 0; } } scanf("%d", &m); while(m--) { cin >> u >> w >> v; b = money[u], c = money[v]; dist[b][c] = w; } floyd(); int flag = 0; for(int i = 0; i < n; i++) { if(dist[i][i] > 1) { flag = 1; break; } } if(flag) printf("Case %d: Yes\n", cnt++); else printf("Case %d: No\n", cnt++); } return 0;}
0 0
- hdu 1217 Arbitrage (Floyd)
- hdu 1217Arbitrage(Floyd)
- HDU 1217 Arbitrage(floyd)
- (Floyd)【HDU 1217】Arbitrage
- hdu 1217 Arbitrage--Floyd
- hdu 1217 Arbitrage 【floyd】
- hdu 1217Arbitrage floyd
- hdu 1217 Arbitrage (Floyd)
- HDU 1217-Arbitrage(Floyd)
- 【hdu 】 Arbitrage (Floyd)
- hdu 1217 Arbitrage (Floyd算法)
- HDU 1217 Arbitrage 货币交换(floyd)
- hdu 1217 Arbitrage (floyd+map)
- hdu 1217 Arbitrage (Floyd + 最大路径)
- POJ 2240 && HDU 1217 Arbitrage(Floyd)
- hdu 1217 Arbitrage (Floyd算法)
- HDU 1217 Arbitrage (floyd dp)
- 【变形Floyd】HDU-1217 Arbitrage
- 欢迎使用CSDN-markdown编辑器
- thrift
- 为第三方提供的功能做抽象层封装
- SQLite3安装
- apache服务器全局配置详解
- HDU 1217 Arbitrage(floyd)
- C++ ofstream和ifstream详细用法
- Hadoop配置文件
- string 与char* char[]之间的转换
- Win7/Win8 64位系统下为Visual Studio 2013配置OpenCV 2.4.9
- C++的多态
- AngularJS基础学习
- 经典面试题之两个链表的第一个公共结点
- 单词接龙