• E


    题目大意:
    汇率问题,有N个银行,他们之间有一些汇率,某个人手里面拿着其中一种钱,然后在这里面兑换钱币,当然兑换是有汇率和手续费的,然后经过一系列兑换后问手里面的钱是不是能增加?
    integer A and B - numbers of currencies it exchanges, and real R AB, C AB, R BA and C BA - 
    这句话是每行有6个数,前面两个数是AB货币,依次往后是AB之间的汇率,AB之间的交易税,BA之间的汇率,BA之间的交易税
    貌似这题就是专门为了spfa设计的啊。。。。。只要判断手持的这种货币是否增长了就行。
    /////////////////////////////////////////////////////////////////////////
    想法没错,不过无情的错了一次,而且还找了很长时间的BUG,最终发现原来是公式写错了....计算汇率的时候应该先减去佣金在乘上汇率....全是泪
    #include<algorithm>
    #include<queue>
    #include<stdio.h>
    #include<string.h>
    #include<vector>
    #include<math.h>
    using namespace std;

    const int maxn = 105;
    const int oo = 0xfffffff;

    struct node
    {
        int B;
        double rate, commission;//汇率和佣金

        node(int B, double r, double c):B(B),rate(r),commission(c){}
    };

    vector<node> G[maxn];
    double v[maxn];

    int spfa(int k, double m)
    {
        queue<int> Q;
        Q.push(k);

        while(Q.size())
        {
            int s = Q.front();
            Q.pop();

            int len = G[s].size();

            for(int i=0; i<len; i++)
            {
                node q = G[s][i];

                double p = (v[s]-q.commission)*q.rate;

                if(p > v[q.B])
                {
                    v[q.B] = p;
                    Q.push(q.B);
                }
            }

            if(v[k] > m)
                return 1;
        }

        return 0;
    }

    int main()
    {
        int N, M, s;
        double m;

        while(scanf("%d%d%d%lf", &N, &M, &s, &m) != EOF)
        {
            int i;

            for(i=1; i<=N; i++)
            {
                v[i] = 0;
                G[i].clear();
            }
            v[s] = m;

            int a, b;
            double rab, cab, rba, cba;

            for(i=0; i<M; i++)
            {
                scanf("%d%d%lf%lf%lf%lf", &a, &b, &rab, &cab, &rba, &cba);
                G[a].push_back(node(b, rab, cab));
                G[b].push_back(node(a, rba, cba));
            }

            int ans = spfa(s, m);

            //printf("%lf ", v[s]);

            if(ans == 1)
                printf("YES ");
            else
                printf("NO ");
        }

        return 0;

    } 

  • 相关阅读:
    关于python列表中的赋值问题
    $' ': command not found报错问题
    0day安全-软件漏洞分析技术(第二版)——Crack实验一
    PNI12927 学习笔记
    Mini2440串口通信之DMA
    Mini2440串口通信
    Mini2440的外部中断编写
    VM中设置redhat为静态IP
    ldr指令小记
    Makefile文件编写小记
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4653833.html
Copyright © 2020-2023  润新知