标签:
链接:点击打开链接
题意:钱的种类为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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/stay_accept/article/details/47807597