码迷,mamicode.com
首页 > 其他好文 > 详细

poj1860

时间:2015-08-20 15:19:15      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

链接:点击打开链接

题意:钱的种类为N,M条命令,拥有种类为S这类钱的数目为V,命令为将a换成b,剩下的四个数为a对b的汇率和a换成b的税,b对a的汇率和b换成a的税,公式为(钱数-税)*汇率

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <queue>
#include <algorithm>
using namespace std;
int n,m,s,vis[105];
double w,dis[105],rate[105][105],cate[105][105];
int spfa(int s){
    int i,j,u;
    queue<int>q;
    q.push(s);
    dis[s]=w;vis[s]=1;
    while(q.size()){
        u=q.front();q.pop();
        vis[u]=0;
        for(i=1;i<=n;i++)
        if(dis[i]<(dis[u]-cate[u][i])*rate[u][i]){
            dis[i]=(dis[u]-cate[u][i])*rate[u][i];
            if(dis[s]>w)                //已经能够产生利润就不用再更新了
            return 1;
            if(!vis[i]){
                q.push(i);
                vis[i]=1;
            }
        }
    }
    return 0;
}                                       //spfs模板
int main(){
    int i,j,a,b,temp;
    double rab,cab,rba,cba;
    while(cin>>n>>m>>s>>w){
        memset(vis,0,sizeof(vis));
        memset(dis,0,sizeof(dis));
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++){
            cate[i][j]=0;
            if(i==j)
            rate[i][j]=1;               //i,j相等时rate是1
            else
            rate[i][j]=0;
        }
        for(i=1;i<=m;i++){
            cin>>a>>b;
            cin>>rab>>cab>>rba>>cba;
            rate[a][b]=rab;
            cate[a][b]=cab;
            rate[b][a]=rba;
            cate[b][a]=cba;
        }
        temp=spfa(s);
        if(temp)
        printf("YES\n");
        else
        printf("NO\n");
    }
    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

poj1860

标签:

原文地址:http://blog.csdn.net/stay_accept/article/details/47807597

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!