zoukankan      html  css  js  c++  java
  • poj1860--Currency Exchange

    Bellman-ford算法的反向应用--正循环检查

    /** rief poj 1860 Bellman-Ford
     *
     * param date 2014/7/24
     * param state AC
     * 
    eturn memory 708K time 141ms
     *
     */
    
    #include <iostream>
    #include <fstream>
    #include <cstring>
    
    using namespace std;
    
    struct RateAndCom
    {
    //public:
        int a;
        int b;
        double rate;
        double Com;
    };//Map[MAXN];
    
    const int MAXN=101;
    RateAndCom Map[101*2];
    double dis[MAXN];
    
    int N;//货币种数
    int M;//兑换点数量
    int S;//持有第s种货币
    double V;//第s种货币本金
    int allEdge;
    
    bool Bellman_Ford()
    {
        memset(dis,0,sizeof(dis));
        dis[S]=V;
        /*relax*/
        bool flag;
        for(int i=1;i<=N-1;i++)
        {
            flag=false;
            for(int j=0;j<allEdge;j++)
                if(dis[Map[j].b] < (dis[Map[j].a]-Map[j].Com)*Map[j].rate)
            {
                dis[Map[j].b] = (dis[Map[j].a]-Map[j].Com)*Map[j].rate;
                flag=true;
            }
            if(!flag)
                break;
        }
    
        for(int k=0;k<allEdge;k++)
            if(dis[Map[k].b] < (dis[Map[k].a]-Map[k].Com)*Map[k].rate)
            return true;
    
        return false;
    }
    
    int main()
    {
        //cout << "Hello world!" << endl;
        //freopen("input.txt","r",stdin);
        //while(scanf("%d %d %d %f",&N,&M,&S,&V)!=EOF)
        while(cin>>N>>M>>S>>V)
        {
            allEdge=0;
            for(int i=0;i<M;i++)
            {
                int a,b;
                double Rab;
                double Cab;
                double Rba;
                double Cba;
                //cin>>a>>b>>Map[a][b].rate>>Map[a][b].Commission
                //>>Map[b][a].rate>>Map[b][a].Commission;
                cin>>a>>b>>Rab>>Cab>>Rba>>Cba;
                Map[allEdge].a=a;
                Map[allEdge].b=b;
                Map[allEdge].rate=Rab;
                Map[allEdge].Com=Cab;
                allEdge++;
                Map[allEdge].a=b;
                Map[allEdge].b=a;
                Map[allEdge].rate=Rba;
                Map[allEdge].Com=Cba;
                allEdge++;
            }
            //Bellman-Ford
            if(Bellman_Ford())
                cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
        return 0;
    }
    
    转载请注明出处:http://blog.csdn.net/greenapple_shan/article/details/38307879

  • 相关阅读:
    subprocess(子进程模块)
    logging日志模块,hashlib hash算法相关的库,
    json pickle xml shelve configparser
    os与操作系统进行交互,sys解释器相关,random随机数,shutil解压和压缩
    目录规范+时间模块
    vue的组件
    drf 分页
    包和模块
    docker镜像&nginx配置
    匿名函数 递归 二分法 面向过程编程
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6780344.html
Copyright © 2011-2022 走看看