zoukankan      html  css  js  c++  java
  • Bellman-Ford变形 Currency Exchange POJ

    题意:货币交换,有n种货币,m个货币兑换的地点,每一个地点提供两种货币的兑换且每一个地点的汇率不同,需要手续费,Rab(一单位货币a可以兑换货币b的数量)

    现如今有货币s共有数量t,要求判断是否可以通过兑换使得货币s增加。如果图中有一个正权回路,可以通过这条回路不断增加某种货币的值,最后在增加货币s的值。

    Bellman-Ford可以判断有没有负权回路。

    建图,判断有没有正权回路。

    //Bellman Flody判断有没有负边权
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define inf 0x3f3f3f
    using namespace std;
    int n,m,s,g;
    double t;
    int u[300],v[300];
    double r[300],c[300],d[105];
    int Bellman()
    {
        memset(d,0,sizeof(d));
        d[s]=t;//d[i]表示i种货币最多可以有d[i];
        for(int i=1;i<=n;i++)
            for(int j=1;j<g;j++)
        {
            if(d[v[j]]<(d[u[j]]-c[j])*r[j])
            {
                if(i==n) return 1;
                d[v[j]]=(d[u[j]]-c[j])*r[j];
            }
        }
        return 0;
    }
    int main()
    {
        cin>>n>>m>>s>>t;
        g=1;
        while(m--)
        {
            int x,y;
            double r1,c1,r2,c2;
            cin>>x>>y>>r1>>c1>>r2>>c2;
            u[g]=x,v[g]=y,r[g]=r1,c[g]=c1;//从u到v的汇率
            g++;
            u[g]=y,v[g]=x,r[g]=r2,c[g]=c2;
            g++;
        }
        if(Bellman()) printf("YES
    ");
         else printf("NO
    ");
    }
  • 相关阅读:
    【转】C++ 实现线程池
    【转】C++ 实现reactor 模式
    【转】C++ 单例模式
    高并发的内存池——TLS MEMMORY POOL
    爬取某东商品数据
    查看解放号的一些Python岗
    查看前程无忧Python岗及一些可视化
    爬某牙小姐姐视频
    爬取某云音乐热歌榜
    键盘及鼠标记录程序
  • 原文地址:https://www.cnblogs.com/Twsc/p/7242130.html
Copyright © 2011-2022 走看看