[HDOJ1217]Arbitrage(floyd)

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

题意:给一些汇率,问是否可以套利。

套利就是经过一些汇率的转换,最终使得本金额比起始金额大。

最短路跑所有的汇率情况,看看有没有使得最终的汇率是大于1的。

  1 /*
  2 ━━━━━┒ギリギリ♂ eye!
  3 ┓┏┓┏┓┃キリキリ♂ mind!
  4 ┛┗┛┗┛┃\○/
  5 ┓┏┓┏┓┃ /
  6 ┛┗┛┗┛┃ノ)
  7 ┓┏┓┏┓┃
  8 ┛┗┛┗┛┃
  9 ┓┏┓┏┓┃
 10 ┛┗┛┗┛┃
 11 ┓┏┓┏┓┃
 12 ┛┗┛┗┛┃
 13 ┓┏┓┏┓┃
 14 ┃┃┃┃┃┃
 15 ┻┻┻┻┻┻
 16 */
 17 #include <algorithm>
 18 #include <iostream>
 19 #include <iomanip>
 20 #include <cstring>
 21 #include <climits>
 22 #include <complex>
 23 #include <cassert>
 24 #include <cstdio>
 25 #include <bitset>
 26 #include <vector>
 27 #include <deque>
 28 #include <queue>
 29 #include <stack>
 30 #include <ctime>
 31 #include <set>
 32 #include <map>
 33 #include <cmath>
 34 using namespace std;
 35 #define fr first
 36 #define sc second
 37 #define cl clear
 38 #define BUG puts("here!!!")
 39 #define W(a) while(a--)
 40 #define pb(a) push_back(a)
 41 #define Rint(a) scanf("%d", &a)
 42 #define Rs(a) scanf("%s", a)
 43 #define FRead() freopen("in", "r", stdin)
 44 #define FWrite() freopen("out", "w", stdout)
 45 #define Rep(i, len) for(int i = 0; i < (len); i++)
 46 #define For(i, a, len) for(int i = (a); i < (len); i++)
 47 #define Cls(a) memset((a), 0, sizeof(a))
 48 #define Clr(a, x) memset((a), (x), sizeof(a))
 49 #define Full(a) memset((a), 0x7f7f7f, sizeof(a))
 50 #define lrt rt << 1
 51 #define rrt rt << 1 | 1
 52 #define pi 3.14159265359
 53 #define RT return
 54 #define lowbit(x) x & (-x)
 55 #define onenum(x) __builtin_popcount(x)
 56 typedef long long LL;
 57 typedef long double LD;
 58 typedef unsigned long long ULL;
 59 typedef pair<int, int> pii;
 60 typedef pair<string, int> psi;
 61 typedef pair<LL, LL> pll;
 62 typedef map<string, int> msi;
 63 typedef vector<int> vi;
 64 typedef vector<LL> vl;
 65 typedef vector<vl> vvl;
 66 typedef vector<bool> vb;
 67
 68 const int maxn = 33;
 69 const double eps = 1e-9;
 70 map<string, int> name;
 71 double dp[maxn][maxn];
 72 int n, m;
 73 char a[81], b[81];
 74 double ex;
 75
 76 int main() {
 77     // FRead();
 78     int _ = 1;
 79     while(~Rint(n) && n) {
 80         int cnt = 1;
 81         name.clear(); Cls(dp);
 82         For(i, 1, n+1) {
 83             Rs(a);
 84             name[a] = i;
 85             dp[i][i] = 1.0;
 86         }
 87         Rint(m);
 88         Rep(i, m) {
 89             cin >> a >> ex >> b;
 90             dp[name[a]][name[b]] = ex;
 91         }
 92         For(k, 1, n+1) {
 93             For(i, 1, n+1) {
 94                 For(j, 1, n+1) {
 95                     if(dp[i][k] * dp[k][j] > dp[i][j]) {
 96                         dp[i][j] = dp[i][k] * dp[k][j];
 97                     }
 98                 }
 99             }
100         }
101         bool flag = 0;
102         For(i, 1, n+1) {
103             if(dp[i][i] > 1) {
104                 flag = 1;
105                 printf("Case %d: Yes\n", _++);
106                 break;
107             }
108         }
109         if(!flag) printf("Case %d: No\n", _++);
110     }
111     RT 0;
112 }
时间: 2024-10-14 05:36:38

[HDOJ1217]Arbitrage(floyd)的相关文章

poj 2240 Arbitrage (Floyd)

链接:poj 2240 题意:首先给出N中货币,然后给出了这N种货币之间的兑换的兑换率. 如 USDollar 0.5 BritishPound 表示 :1 USDollar兑换成0.5 BritishPound. 问在这N种货币中是否存在货币经过若干次兑换后,兑换成原来的货币能够使货币量添加. 思路:本题事实上是Floyd的变形.将变换率作为构成图的路径的权值.只是构成的图是一个有向图. 最后将松弛操作变换为:if(dis[i][j]<dis[i][k]*dis[k][j]). #includ

【UVA】821-Page Hopping(Floyd)

模板题,求一个点到任何一点的距离,用Floyd就行了,结点不一定是从1 ~ n 的,所以需要记录结点的id 14063895 821 Page Hopping Accepted C++ 0.119 2014-08-19 10:00:27 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector> #include<sta

hdu 1690 Bus System(Floyd)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1690 Problem Description Because of the huge population of China, public transportation is very important. Bus is an important transportation method in traditional public transportation system. And it's

人活着系列之开会 (floyd)

人活着系列之开会 Time Limit: 1000MS Memory limit: 65536K 题目描述 人活着如果是为了事业,从打工的到老板的,个个都在拼搏,奋斗了多年终于有了非凡成就,有了一笔丰富的钱财.反过来说,人若赚取了全世界又有什么益处呢?生不带来,死了你还能带去吗?金钱能买保险,但不能买生命,金钱能买药品,但不能买健康,人生在世,还是虚空呀! 在苍茫的大海上,有很多的小岛,每个人都在自己的小岛上.又到了开会的时候了,鹏哥通过飞信告知了每个人,然后大家就开始往鹏哥所在的主岛走,问谁先

hdu 1869 (Floyd)

http://acm.hdu.edu.cn/showproblem.php?pid=1869 六度分离 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4355    Accepted Submission(s): 1768 Problem Description 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象

最短路径之弗洛伊德算法(Floyd)

Floyd算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法. 路径矩阵 通过一个图的权值矩阵求出它的每两点间的最短路径矩阵. 从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归的进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1): 又用同样地公式由D(1)构造出D(2):--:最后又用同样的公式由D(n-1)构造出矩阵D(n).矩阵D(n) 的 i 行 j 列元素便是 i 号顶点到 j 号顶点的最短路径长度,称D(n)为图的距离矩阵,同时还可引入一个后

(floyd)佛洛伊德算法

Floyd–Warshall(简称Floyd算法)是一种著名的解决任意两点间的最短路径(All Paris Shortest Paths,APSP)的算法.从表面上粗看,Floyd算法是一个非常简单的三重循环,而且纯粹的Floyd算法的循环体内的语句也十分简洁.我认为,正是由于“Floyd算法是一种动态规划(Dynamic Programming)算法”的本质,才导致了Floyd算法如此精妙.因此,这里我将从Floyd算法的状态定义.动态转移方程以及滚动数组等重要方面,来简单剖析一下图论中这一重

【CodeForces - 296D】Greg and Graph(floyd)

Description 题意:给定一个有向图,一共有N个点,给邻接矩阵.依次去掉N个节点,每一次去掉一个节点的同时,将其直接与当前节点相连的边和当前节点连出的边都需要去除,输出N个数,表示去掉当前节点之前的所有两点间最短距离和.n<=500 Solution 如果暴力打肯定是会超时的,那就要运用到floyd(hj) floyd算法内2个循环就相当于新加入外循环的那个点然后跟新最短路, 所以可以把题目看成倒过来依次加点,每次\(n^2\)平方更新一下,总共\(O(n^3)\) Code #incl

1035.找出直系亲属(floyd)

题目描述:     如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-. 输入:     输入包含多组测试用例,每组用例首先包含2个整数n(0<=n<=26)和m(0<m<50)