http://poj.org/problem?id=1860

题意:汇率转换,与之前的2240有点类似,不同的是那个题它去换钱的时候,是不需要手续费的,这个题是需要手续费的,这是个很大的不同。

思路:还是转换成为最短路的问题,主要的困难也就是关于它的松弛方程。dist [edge[i].v] < (dist[ tmp ] - edge[ i ].r) * edge[ i ].c  。这个就是松弛方程,当它的钱的数目增多的时候松弛。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <queue>
  4.  
  5. using namespace std;
  6.  
  7. int m,n,p,head[ ],pos,num[ ];
  8. bool vis[ ];
  9. double val,dist[ ];
  10.  
  11. struct note{
  12. int v,next;
  13. double r,c;
  14. }edge[ ];
  15.  
  16. void add(int x,int v,double r,double c)
  17. {
  18. edge[ pos ].v = v;
  19. edge[ pos ].r = r;
  20. edge[ pos ].c = c;
  21. edge[ pos ].next = head[ x ];
  22. head[ x ] = pos ++;
  23. }
  24.  
  25. bool spfa()
  26. {
  27. queue<int >s;
  28. s.push(p);
  29. dist[ p ] = val;
  30. vis[ p ] = true;
  31. num[ p ] ++;
  32. while(!s.empty())
  33. {
  34. int tmp = s.front();
  35. s.pop();
  36. vis[ tmp ] = false;
  37. for( int i = head[ tmp ] ; i != - ; i = edge[ i ].next)
  38. {
  39. if( dist[ edge[ i ].v ] < (dist[ tmp ] - edge[ i ].c ) * edge[ i ].r )
  40. {
  41. dist[ edge[ i ].v ] = (dist[ tmp ] - edge[ i ].c ) * edge[ i ].r;
  42. if( !vis[ edge[ i ].v ] )
  43. {
  44. s.push( edge[ i ].v );
  45. vis[ edge[ i ].v ] = true;
  46. num[ edge[ i ].v ] ++; //可能构成正权回路,这个是用来判断的。但次数比m次要大的时候,就肯定是增多的。可以直接return 。
  47. if( num[edge[ i ].v] > m)
  48. return true;
  49. }
  50. }
  51. }
  52. }
  53. if( dist[ p ] > val ) return true; //如果之后的钱比之前的多,也return true.
  54. return false;
  55. }
  56.  
  57. int main()
  58. {
  59. // freopen("in.txt","r",stdin);
  60. int a,b;
  61. double r1,c1,r2,c2;
  62. pos = ;
  63. memset( head , - , sizeof( head ) );
  64. memset( dist , , sizeof( dist ) );
  65. memset( vis , false ,sizeof( vis ) );
  66. memset( num , , sizeof( num ) );
  67. scanf("%d%d%d%lf",&m,&n,&p,&val);
  68. for( int i = ; i <= n ; i++ )
  69. {
  70. scanf("%d%d%lf%lf%lf%lf",&a,&b,&r1,&c1,&r2,&c2);
  71. add(a,b,r1,c1);
  72. add(b,a,r2,c2);
  73. }
  74. if(spfa()) printf("YES\n");
  75. else printf("NO\n");
  76. return ;
  77. }

POJ 1860(spfa)的更多相关文章

  1. Currency Exchange POJ - 1860 (spfa判断正环)

    Several currency exchange points are working in our city. Let us suppose that each point specializes ...

  2. POJ Wormholes (SPFA)

    http://poj.org/problem?id=3259 Description While exploring his many farms, Farmer John has discovere ...

  3. 模板C++ 03图论算法 1最短路之单源最短路(SPFA)

    3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...

  4. POJ题目(转)

    http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期:一.基本算法:     (1)枚举. (poj1753,poj29 ...

  5. 最短路(SPFA)

    SPFA是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算. 主要思想是: 初始时将起点加入队列.每次从队列中取出一个元素,并对所有与它相邻的点进行修改,若某个相邻的点修改成功,则将 ...

  6. Bellman-Ford算法及其队列优化(SPFA)

    一.算法概述 Bellman-Ford算法解决的是一般情况下的单源最短路径问题.所谓单源最短路径问题:给定一个图G=(V,E),我们希望找到从给定源结点s属于V到每个结点v属于V的最短路径.单源最短路 ...

  7. Repeater POJ - 3768 (分形)

    Repeater POJ - 3768 Harmony is indispensible in our daily life and no one can live without it----may ...

  8. Booksort POJ - 3460 (IDA*)

    Description The Leiden University Library has millions of books. When a student wants to borrow a ce ...

  9. Radar Installation POJ - 1328(贪心)

    Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. ...

随机推荐

  1. AVA数据库连接池.

    package db_pool; //// 一个效果非常不错的JAVA数据库连接池.// from:http://www.jxer.com/home/?uid-195-action-viewspace ...

  2. 电改:OPower资料调研

    0.简介     power公司是于 2007 年创办,是全球领先的家庭能源管理企业.家庭能源数据分析公司.Opower 与公用电力公司合作,抢占家庭消费者"入口",获取家庭消费者 ...

  3. JS组件系列——Bootstrap寒冬暖身篇:弹出框和提示框效果以及代码展示

    前言:对于Web开发人员,弹出框和提示框的使用肯定不会陌生,比如常见的表格新增和编辑功能,一般常见的主要有两种处理方式:行内编辑和弹出框编辑.在增加用户体验方面,弹出框和提示框起着重要的作用,如果你的 ...

  4. 基于Nginx dyups模块的站点动态上下线并实现简单服务治理

    简介 今天主要讨论一下,对于分布式服务,站点如何平滑的上下线问题. 分布式服务 在分布式服务下,我们会用nginx做负载均衡, 业务站点访问某服务站点的时候, 统一走nginx, 然后nginx根据一 ...

  5. 正则获取HTML代码中img的src地址

    /// <summary> /// 获得HTML中所有图片的src地址 /// </summary> /// <param name="sHtmlText&qu ...

  6. VIM编辑器常用命令

    一.剪切: 1. 欲从当前光标删除至下一个单词,请输入:dw  2. 欲从当前光标删除至当前行末尾,请输入:d$  3. 欲删除整行,请输入:dd //可以使用 dNd删除多行 N代表行数  4. 欲 ...

  7. Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询

    在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...

  8. Charles 从入门到精通

    特别说明:原文来自唐巧大神的博客 http://blog.devtang.com/2015/11/14/charles-introduction/ Charles 从入门到精通 文章目录 1. 目录及 ...

  9. js之 matches (可以取代jq的 delegate 方法)

    问题:请给#wrap 下面的子元素添加点击事件! <div id="wrap"> <a class="btn" href="http ...

  10. python下ssh的简单实现

    python下的ssh都需要借助第三方模块paramiko来实现,在使用前需要手动安装. 一.python实现ssh (1) linux下的ssh登录 root@ubuntu:~# ssh morra ...