hdu 1217 Arbitrage(佛洛依德)
Arbitrage
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6360 Accepted Submission(s):
2939
exchange rates to transform one unit of a currency into more than one unit of
the same currency. For example, suppose that 1 US Dollar buys 0.5 British pound,
1 British pound buys 10.0 French francs, and 1 French franc buys 0.21 US dollar.
Then, by converting currencies, a clever trader can start with 1 US dollar and
buy 0.5 * 10.0 * 0.21 = 1.05 US dollars, making a profit of 5 percent.
Your job is to write a program that takes a list of currency exchange
rates as input and then determines whether arbitrage is possible or
not.
the first line of each test case there is an integer n (1<=n<=30),
representing the number of different currencies. The next n lines each contain
the name of one currency. Within a name no spaces will appear. The next line
contains one integer m, representing the length of the table to follow. The last
m lines each contain the name ci of a source currency, a real number rij which
represents the exchange rate from ci to cj and a name cj of the destination
currency. Exchanges which do not appear in the table are impossible.
Test
cases are separated from each other by a blank line. Input is terminated by a
value of zero (0) for n.
arbitrage is possible or not in the format "Case case: Yes" respectively "Case
case: No".
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #define M 35
- using namespace std;
- double map[M][M];
- int n;
- void floyd() //利用floyd算法计算最大赔率
- {
- int k,i,j;
- for(k=; k<=n; k++)
- for(i=; i<=n; i++)
- for(j=; j<=n; j++)
- if(map[i][j]<map[i][k]*map[k][j])
- map[i][j]=map[i][k]*map[k][j];
- }
- int main()
- {
- int m,i,j,w=;
- char s[M],str[M][M];
- while(~scanf("%d",&n)&&n)
- {
- for(i=; i<=n; i++)
- scanf("%s",str[i]);
- for(i=; i<=n; i++)
- for(j=; j<=n; j++)
- {
- if(i==j) map[i][j]=; //因为是找最大的汇率,因此初始时本身转本身为1,其他转化为0
- else map[i][j]=;
- }
- scanf("%d",&m);
- int a,b;
- double c;
- for(i=; i<=m; i++)
- {
- scanf("%s",s);
- for(a=; a<=n; a++) //将其转化为map数组记录
- if(!strcmp(s,str[a]))
- break;
- scanf("%lf",&c);
- scanf("%s",s);
- for(b=; b<=n; b++)
- if(!strcmp(s,str[b]))
- break;
- map[a][b]=c;
- }
- floyd();
- cout<<"Case "<<w++<<": ";
- if(map[][]>)
- cout<<"Yes"<<endl;
- else
- cout<<"No"<<endl;
- }
- return ;
- }
邻接表:
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <queue>
- #define N 35
- #define M 35*35*10
- #define INF 0x3f3f3f3f
- using namespace std;
- struct Edge
- {
- int from,to;
- double val;
- int next;
- } edge[M*];
- int n,m,tol,s,t,fail;
- double dis[N];
- bool vis[N];
- int head[M*];
- void init()
- {
- tol=;
- memset(head,-,sizeof(head));
- }
- void addEdge(int u,int v,double w)
- {
- edge[tol].from=u;
- edge[tol].to=v;
- edge[tol].val=w;
- edge[tol].next=head[u];
- head[u]=tol++;
- }
- void getmap()
- {
- char str[N][N];
- char s[N];
- for(int i=; i<=n; i++)
- scanf("%s",str[i]);
- int a,b;
- double c;
- scanf("%d",&m);
- while(m--)
- {
- scanf("%s",s);
- for(a=; a<=n; a++)
- if(!strcmp(s,str[a]))
- break;
- scanf("%lf",&c);
- scanf("%s",s);
- for(b=; b<=n; b++)
- if(!strcmp(s,str[b]))
- break;
- addEdge(a,b,c);
- }
- memset(vis,false,sizeof(vis));
- memset(dis,,sizeof(dis));
- }
- void spfa()
- {
- queue<int>q;
- q.push();
- dis[]=1.0;
- vis[]=true;
- while(!q.empty())
- {
- int u=q.front();
- q.pop();
- vis[u]=false;
- for(int i=head[u]; i!=-; i=edge[i].next)
- {
- int v=edge[i].to;
- if(dis[v]<dis[u]*edge[i].val)
- {
- dis[v]=dis[u]*edge[i].val;
- if(!vis[v])
- {
- vis[v]=true;
- q.push(v);
- }
- if(dis[]>)
- {
- fail=;
- return;
- }
- }
- }
- }
- }
- int main()
- {
- int i,j,T=;
- while(~scanf("%d",&n)&&n)
- {
- init();
- getmap();
- printf("Case %d: ",T++);
- fail=;
- spfa();
- if(fail)
- printf("Yes\n");
- else
- printf("No\n");
- }
- return ;
- }
hdu 1217 Arbitrage(佛洛依德)的更多相关文章
- 佛洛依德 c++ 最短路径算法
//20142880 唐炳辉 石家庄铁道大学 #include<iostream> #include<string> using namespace std; #define ...
- 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 (spfa算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217 题目大意:通过货币的转换,来判断是否获利,如果获利则输出Yes,否则输出No. 这里介绍一个ST ...
- [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< ...
随机推荐
- 阿里云MaxCompute 2019-7月刊
您好,MaxCompute 2019.7月刊为您带来7月产品.技术最新动态,欢迎阅读. 导读 [发布]7月产品重要发布 [资讯]7月重要资讯 [文档]7月重要文档更新推荐 [干货]7月精选技术文章推荐 ...
- 阿里云DMS发布数据库网关服务: 打通网络限制 开启数据库统一管理的万能钥匙
概述 阿里云数据管理DMS在云端可提供专业的数据库服务,除对标本地数据库软件的基础功能外,还包含性能诊断.数据追踪.跨实例SQL查询(含异构数据库类型之间)等专业性功能,同时提供审计安全和企业级数据库 ...
- 模拟3题解 T3建造游乐园
T3建造游乐园 这题的关键是推式子 i个点中,有g[i]个方案是度为偶数但不一定连通那么就要减去不合法的设已有j个合法,其个数为f[j],剩下i-j个的方案数是g[i-j]选出来一个固定的点在合法的j ...
- WordPress使用自定义文章类型实现任意模板的方法和怎么做邮件回复
主要就是使用了register_post_type 函数. 1.创建插件目录 新建一个文件夹用来存放插件文件,这里我就命名这个文件夹为myMood 2.创php代码文件 在刚才创建的文件夹里面新建一个 ...
- Servlet表单处理
HttpServletRequest 继承ServletRequest HttpServletRequest生命周期: 一个HttpServletRequest对象在用户向web服务器发送请求时 ...
- 一键制作启动elasticsearch和kibana启动的脚本可执行程序
1.测试环境 测试环境: . windows10专业版 . elasticsearch6.5.4 . kibana6.5.4 2.启动的脚本run.py import os import time i ...
- No.2 Verilog 模块和描述风格
2-1 模块 Verilog语言基本的描述单元----模块,模块是用来描述某个设计的功能或结构,以及它与其它外部模块进行通信的端口. module module_name(port_list); De ...
- prepareStatement设置参数,mysql数据出现中文‘?’的情景与解决方式
在prepareStatement中传入中文的参数,mysql数据库中出现“?”号 try { Class.forName("com.mysql.jdbc.Driver"); co ...
- Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值. 示例: 输入: root = [4,2,6,1,3,null,null] 输出: 1 解释: 注意,root是树结点对象(Tr ...
- windows.open window.location.href的用法和区别
window.location.href 只能在当前页面打开,不能用新窗口打开 windows.open("URL","窗口名称","窗口外观设定& ...