设为首页 收藏本站
查看: 934|回复: 0

[经验分享] poj 1860 Currency Exchange (最短路bellman_ford思想找正权环 最长路)

[复制链接]

尚未签到

发表于 2015-9-12 10:10:51 | 显示全部楼层 |阅读模式
  感觉最短路好神奇呀,刚开始我都 没想到用最短路
  题目:http://poj.org/problem?id=1860
  题意:有多种从a到b的汇率,在你汇钱的过程中还需要支付手续费,那么你所得的钱是 money=(nowmoney-手续费)*rate,现在问你有v钱,从s开始出发交换钱能不能赚钱
  题解:这题其实是用bellman_ford的思想,通过n-1次松弛后,如果还能增加,就说明有环 可以使金钱数不断增加。



1 #include <iostream>
2  #include<cstdio>
3  #include<cstring>
4  #include<cstdlib>
5  #include<stack>
6  #include<queue>
7  #include<cmath>
8  #include<algorithm>
9  using namespace std;
10  int cnt;
11  double dis[1000];
12  double n,m,v;
13  struct node
14  {
15      int u,v,next;
16      double r,c;
17  }edge[1000];
18  
19  void add(int u,int v,double r,double c)
20  {
21      edge[cnt].u=u; edge[cnt].v=v;
22      edge[cnt].r=r; edge[cnt++].c=c;
23  }
24  int bellman_ford(int s)
25  {
26      int i,j;
27      for(i=0; i<n; i++)
28      dis=0;
29      dis=v;  //跟最短路不一样,到自己的距离是原来的钱数
30      for(i=0; i<n-1; i++)
31      for(j=0; j<cnt; j++)
32      {
33          if(dis[edge[j].v]<(dis[edge[j].u]-edge[j].c)*edge[j].r)//逆用最短路
34          dis[edge[j].v]=(dis[edge[j].u]-edge[j].c)*edge[j].r;
35      }
36      for(j=0; j<cnt; j++)
37         if(dis[edge[j].v]<(dis[edge[j].u]-edge[j].c)*edge[j].r)//如果成立说明有能使钱数增加的环
38          return 1;
39      return 0;
40  }
41  int main()
42  {
43      int s,i,j,a,b;
44      double rab,cab,rba,cba;
45      scanf("%lf%lf%d%lf",&n,&m,&s,&v);
46      cnt=0;
47      for(i=0; i<m; i++)
48      {
49          scanf("%d%d%lf%lf%lf%lf",&a,&b,&rab,&cab,&rba,&cba);
50          add(a,b,rab,cab);
51          add(b,a,rba,cba);
52      }
53      if(bellman_ford(s)) printf("YES\n");
54      else printf("NO\n");
55      return 0;
56  }
57  
  这个博客:http://blog.iyunv.com/wangjian8006/article/details/7871753
  就是到s的距离大于v了,就是YES。
  有spfa的代码,这个应该理论上更省时间

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-112558-1-1.html 上篇帖子: 利用Log parse 分析Exchange 性能并产生相应报表!(1)-Protocol 协议 Log!(2) 下篇帖子: Exchange上修改邮件大小限制的几个地方
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表