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;

    }

  • 相关阅读:
    poj3417 闇の連鎖 【树上差分】By cellur925
    Luogu P1613跑路【倍增】By cellur925
    CF519E A and B and Lecture Rooms
    poj 2412 The Balance 【exgcd】By cellur925
    NOIp 2014 解方程 【数学/秦九韶算法/大数取膜】By cellur925
    Maven项目整合SSH框架
    传递依赖
    Maven项目整合Struts2框架
    K.O. -------- Eclipse中Maven的报错处理
    依赖范围
  • 原文地址:https://www.cnblogs.com/philippica/p/4006946.html
Copyright © 2011-2022 走看看