zoukankan      html  css  js  c++  java
  • poj1860

    刚上来一堆英文着实有点蒙逼,仔细分析是一个Bellman的变形,只要能找出一个无限增大的环这个题就好解决了,我这里用的SPFA,用邻接链表进行储存,直接套用的模板,部分变量名字没有改的很好

    #include <iostream>
    #include<string.h>
    #include <queue>
    #include <vector>
    using namespace std;
    #define MAX  99999999;
    double dis[1000+6];
    double vis[1000+6];
    int n;
    double fir;
    typedef struct
    {
    	int x;
    	double rate;
    	double cost;
    }point;
    vector<point> p[1010];
    int Spfa(int start)
    {
    
        queue<int> Q;
        memset(vis, 0, sizeof(vis));
        memset(dis, 0, sizeof(dis));
        dis[start] = fir;
        vis[start] = true;
        Q.push(start);
        while (!Q.empty()){
            int temp = Q.front();
            Q.pop();
             vis[temp] = false;
            for(int i=0; i<p[temp].size(); i++)
            {
                int v=p[temp][i].x;
                double w=p[temp][i].rate;
                double z=p[temp][i].cost;
                if ((dis[temp]-z)*w > dis[v])
                {
                    dis[v] = (dis[temp]-z)*w;
                    if(dis[start]>fir)
                        return true;
                    if (!vis[v])
                    {
                        Q.push(v);
                        vis[v] = true;
                    }
                }
            }
    
        }
        return false;
    }
    int main()
    {
        int m,s;
    
        while(cin>>n>>m>>s>>fir)
        {
    
            point node;
           int from,to;
           double rab,rba,cab,cba;
           for(int i=0;i<m;i++)
           {
               cin>>from>>to>>rab>>cab>>rba>>cba;
               node.x=to;
               node.rate=rab;
               node.cost=cab;
               p[from].push_back(node);
               node.x=from;
               node.rate=rba;
               node.cost=cba;
               p[to].push_back(node);
    
           }
           int flag=0;
           flag=Spfa(s);
           if(flag)
           cout<<"YES"<<endl;
           else
           cout<<"NO
    ";
        for(int i=1;i<n;i++)
            p[i].clear();
        }
        return 0;
    }
    

      

  • 相关阅读:
    电信10兆指的是多少Mbps
    keycloak ssl-required报错问题处理
    Centos7 DNS神奇的配置
    angular4套用primeng样式
    Python库大全
    jquery根据name属性的高级选择
    Js String 属性扩展
    SQLSever 触发器
    IaaS, PaaS和SaaS
    Sql Server 基础知识
  • 原文地址:https://www.cnblogs.com/lulichuan/p/6296568.html
Copyright © 2011-2022 走看看