【组队赛#5】BNU 4291 Arbitrage? (floyd最短路 map映射)

【题目链接】click here~~

【题目大意】去多个国家旅游,给定国与国之间汇率的转化率,如果从起点出发最后回到起点,有收益则符合,否则不符合

【解题思路】

判一次环,用floyd计算距离最短的而且转换率最大的,map<string ,int >映射  <字符串--点>

代码

/*
BNUOJ 4291 Arbitrage?
Author :HRW
判一次环,用floyd计算距离最短的而且转换率最大的
map<string ,int >映射  <字符串--点>
*/
#include <bits/stdc++.h>
using namespace std;
const int maxn = 300;
double dp[maxn][maxn];
map<string,int>mapp;
double eps = 1e-8;
int main()
{
    int n,m,i,j,k,a,b,t;
    string s,s1,s2;
    while(cin>>n,n)
    {
        memset(dp,0,sizeof(dp));
        for(i=1; i<=n; i++)
        {
            cin>>s;
            mapp[s]=i;//将字符串映射到i
            dp[i][i]=1;//初始化本身距离为1
        }
        cin>>m;
        double x,y;
        for(i=0; i<m; i++)
        {
            cin>>s1>>s2;
            scanf("%lf:%lf",&x,&y);
            dp[mapp[s1]][mapp[s2]]=y/x;//s1 到s2转换率
        }
        for(k=1; k<=n; k++){//floyd计算距离最短的转换率最大
            for(i=1; i<=n; i++){
                for(j=1; j<=n; j++){
                    dp[i][j]=max(dp[i][j],dp[i][k]*dp[k][j]);
                }
            }
        }
        bool flag=false;
        for(i=1; i<=n; i++){
            if(dp[i][i]>1.0){//存在
                flag=true;
                break;
            }
        }
        if(flag) puts("Arbitrage");
        else puts("Ok");
    }
    return 0;
}
时间: 2024-08-03 15:27:59

【组队赛#5】BNU 4291 Arbitrage? (floyd最短路 map映射)的相关文章

【啊哈!算法】算法6:只有五行的Floyd最短路算法

暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有4个城市8条公路,公路上的数字表示这条公路的长短.请注意这些公路是单向的.我们现在需要求任意两个城市之间的最短路程,也就是求任意两个点之间的最短路径.这个问题这也被称为“多源最短路径”问题. 现在需要一个数据结构来存储图的信息,我们仍然可以用一个4*4的矩阵(二维数组e)来存储.比如1号城市到2号城市的路程为2,则设e[1][2]

HDU 1385 Minimum Transport Cost(Floyd 最短路 打印路径)

HDU 1385 大意: 有N个城市,然后直接给出这些城市之间的邻接矩阵,矩阵中-1代表那两个城市无道路相连,其他值代表路径长度. 如果一辆汽车经过某个城市,必须要交一定的钱(可能是过路费). 现在要从a城到b城,花费为路径长度之和,再加上除起点与终点外所有城市的过路费之和. 求最小花费,如果有多条路经符合,则输出字典序最小的路径. 思路: Floyd求最短路,打印路径即可. 1 /*--------------------------------------------------------

poj2607Fire Station(floyd最短路)

题目链接: 啊哈哈,点我带我 这道题目当时一看觉得很熟悉,但是后来越想越混乱,搞得最后题目都没搞清楚...比赛的时候不知道怎么想的,但是大致思想是对的.... 题意: 这道题目是讲原来镇上有若干个加油站,但是镇上的居民觉得消防站的距离李自己家太远,所以决定在居民点键一个消防站,要使离居民点的最大距离最小.. 思路:毫无疑问是最短路...但是这题数据太多..所以预处理的时候用floyd求出两个 任意两点间的距离,然后用加油站去更新到到各个居民点的最短距离..那么枚举所有加油站后就会得到所有到居民点

HDU 2833 WuKong(floyd最短路)

题目地址:HDU 2833 这题想到了最后是通过dis[s][t]==dis[s][i]+dis[i][j]+dis[j][t]的思路来判定是否属于最短路的一条..但是没想到可以用floyd来找最短路中的点数...最短路还是太渣了..好多性质都不会利用.. 这题的思路就是通过floyd对每两个点之间的最短路条数进行计数,然后通过上面的公式(对两条路线均要判定,都符合才说明都可以走),再找最短路中的最大点数. 代码如下: #include <iostream> #include <stdi

POJ2112Optimal Milking(二分+floyd最短路+网络流)

题目地址:http://poj.org/problem?id=2112 最近忙着预习课本备考,没怎么刷题,(我是真的有在好好看书..)不敲题还是手痒痒,马上就邀请赛了,还是每晚睡觉前都拿来刷题吧.白天的时间足够了. 话说这题调了一晚上...一直以为是几天没敲状态下滑..(虽然也没几天..)当发现错误的时候才发现原来是少敲了个字母...而且我一般很少在bfs的那个地方出错,错误地方也很隐蔽..所以找了一晚上,真是敲错一个字母成千古恨. 这题大概是职业生涯目前为止敲得最长的一道算法题了..(模拟题除

POJ2240——Arbitrage(Floyd算法变形)

Arbitrage DescriptionArbitrage is the use of discrepancies in currency 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

hdu 1217 Arbitrage Floyd||SPFA

转载请注明出处:http://acm.hdu.edu.cn/showproblem.php?pid=1217 Problem Description Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currency. For example, suppose that 1

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

Arbitrage Problem Description Arbitrage is the use of discrepancies in currency 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 p

hdu 2112 (最短路+map)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14515    Accepted Submission(s): 3405 Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发