首页 > 代码库 > UVA 436 - Arbitrage (II)(floyd)
UVA 436 - Arbitrage (II)(floyd)
UVA 436 - Arbitrage (II)
题目链接
题意:给定一些国家货币的汇率,问能否通过不断换货币使钱得到增长
思路:floyd,完事后判断一下有没有连到自己能大于1的情况
代码:
#include <cstdio> #include <cstring> #include <iostream> #include <string> #include <map> using namespace std; const int N = 35; int n; double g[N][N]; map<string, int> hash; int main() { int cas = 0; while (~scanf("%d", &n) && n) { string a, b; hash.clear(); for (int i = 1; i <= n; i++) { cin >> a; hash[a] = i; } int m; double f; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (i == j) g[i][j] = 1.0; else g[i][j] = 0; } } scanf("%d", &m); while (m--) { cin >> a >> f >> b; int u = hash[a], v = hash[b]; g[u][v] = f; } for (int k = 1; k <= n; k++) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) g[i][j] = max(g[i][j], g[i][k] * g[k][j]); } } printf("Case %d: ", ++cas); int flag = 1; for (int i = 1; i <= n; i++) { if (g[i][i] > 1.0) { printf("Yes\n"); flag = 0; break; } } if (flag) printf("No\n"); } return 0; }
UVA 436 - Arbitrage (II)(floyd)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。