POJ(2240)(Arbitrage)

链接:https://vjudge.net/problem/POJ-2240
思路:题目要求通过一系列汇率转换,可否使最后赚钱。这是一个很典型的最小生成树(其实是最大生成树)问题,类似的还有收取手续费兑换的汇率问题,大概思路就是指定一个初始金额,然后对每一个点的金额进行更新,如果第n次还在更新,说明存在正环,此时就可以通过兑换赚钱。由于本题没有指定开始的点,所以所有的点都要搜索一遍。

代码:

/*************************************************************************
    > File Name: arbitrage.cpp
    > Author: 
    > Mail: 
    > Created Time: Mon 30 Jul 2018 11:07:05 PM CST
 ************************************************************************/

#include
#include
#include
using namespace std;

int n,m;
map trans;//记录货币的序号
double d[31];

//记录汇率
struct edge{
int from,to;
    double cost;
    edge(){}
    edge(int fromm,int too,double costt){
        from = fromm;
        to = too;
        cost = costt;
    }
}es[901];

bool shortpath(int w){
for(int i=0;i>n&&n){
    string s,ss;
    double t;
    for(int i=0;i>s;
        trans[s] = i;
    }
    cin>>m;
    for(int i=0;i>s>>t>>ss;
        es[i].from = trans[s];
        es[i].to = trans[ss];
        es[i].cost = t;
    }

       int judge = 0;
//搜索所有的点作为起点
       for(int i=0;i

你可能感兴趣的:(POJ(2240)(Arbitrage))