zoukankan      html  css  js  c++  java
  • POJ 1860: Currency Exchange 【SPFA】

    套汇问题,从源点做SPFA,如果有一个点入队次数大于v次(v表示点的个数)则图中存在负权回路,能够套汇,如果不存在负权回路,则判断下源点到自身的最长路是否大于自身,使用SPFA时松弛操作需要做调整

    #include<iostream>

    #include<cstdio>

    #include<string.h>

    #include <stdlib.h>

    #include <math.h>

    using namespace std;

    const int maxn=2000;

    double dist[maxn]={0},rate[maxn][maxn]={{0}},ope[maxn][maxn]={{0}},v;

    int n,m,s,cnt[maxn]={0};

    bool spfa(int scr)

    {

       int l=0,r=1,que[10000]={0},visit[maxn]={0},temp;

       que[++l]=scr;

       dist[scr]=v;

       cnt[scr]=1;

       while(l<=r)

        {

           temp=que[l++];

           visit[temp]=0;

           for(int i=1;i<=n;i++)

           {

               if (rate[temp][i]>0 &&dist[i]<(dist[temp]-ope[temp][i])*rate[temp][i])

               {

                   dist[i]=(dist[temp]-ope[temp][i])*rate[temp][i];

                    if (visit[i]==0)

                   {

                        visit[i]=1;

                        que[++r]=i;

                        cnt[i]++;

                        if (cnt[i]>=n)returntrue;

                    }

               }

           }

        }

       return dist[s]>v;

    }

    int main()

    {

       int x,y;

       scanf("%d%d%d%lf",&n,&m,&s,&v);

       for(int i=1;i<=m;i++)

        {

           scanf("%d%d",&x,&y);

           scanf("%lf%lf%lf%lf",&rate[x][y],&ope[x][y],&rate[y][x],&ope[y][x]);

        }

       if(spfa(s))printf("YES ");else printf("NO ");

       return 0;

    }

  • 相关阅读:
    使用WebAPI流式传输大文件(在IIS上大于2GB)
    网页扫描仪图像上传
    网页高拍仪图像上传
    C++
    Tomcat Connector三种执行模式(BIO, NIO, APR)的比較和优化
    编程精粹--编写高质量C语言代码(1):假想编译程序
    一个软件项目的总纲性的測试计划叫什么?
    Java字符串的格式化与输出
    Servlet入门(第一个Servlet的Web程序)
    求职小技巧,赢得大机会
  • 原文地址:https://www.cnblogs.com/philippica/p/4006946.html
Copyright © 2011-2022 走看看