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

题意:  题目中主要是说存在货币兑换点,然后现在手里有一种货币,要各种换来换去,最后再换回去的时候看能不能使原本的钱数增多,每一种货币都有对应的汇率,而货币A到货币B的汇率即为1货币A换得得货币B的数量,但兑换点是要收取佣金的,且佣金从源货币中扣除,例如,你想在汇率29.75,佣金为0.39的兑换点把100美元换成卢布,得到的卢布数即为(100-0.39)*29.75 = 2963.3975.

样例解释:

3 2 1 20.0
1 2 1.00 1.00 1.00 1.00
2 3 1.10 1.00 1.10 1.00

多组输入,第一行中N代表有N种货币可以互相兑换,M代表有M个货币兑换点,S代表这个人手中的的货币的编号,V代表这个人手中拥有的货币数量,底下M行

每行六个数,A,B代表可以交换的货币A和B,剩下的实数RAB,CAB,RBA,CBA,代表A到B的汇率,佣金,B到A的汇率,佣金。以某种兑换方式增加原本的钱数,而且必须兑换为原来的货币。

解法:用spfa和Bellman都可以,我用的是spfa,改了一下原模板就过了

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 int u,v,w;
 8 const int maxn = 1011;
 9 const int maxm = 10011;
10 const int oo = 1<<29;
11 struct node
12 {
13     int u;
14     int v;
15     double x,y ;
16     int next;
17 }edge[maxm];
18 double dis[maxn];
19 int m,n,num;
20 double ount;
21 int head[maxn],cnt,sum[maxn];
22 int vis[maxn] = {0};
23 queue<int>qu;
24 void add(int u,int v,double x,double y)
25 {
26     edge[cnt].u = u ;
27     edge[cnt].v = v ;
28     edge[cnt].x = x ;
29     edge[cnt].y = y ;
30     edge[cnt].next = head[u];
31     head[u] = cnt++ ;
32 }
33 int spfa(int s)
34 {
35     for(int i = 0 ; i < m ; i++)
36     {
37         dis[i] = 0;
38         vis[i] = 0 ;
39     }
40     dis[s] = ount;
41     qu.push(s);
42     vis[s] = 1 ;
43     while(!qu.empty())
44     {
45         int u = qu.front();
46         qu.pop();
47         vis[u] = 0;
48         for(int i = head[u] ; i != -1 ; i = edge[i].next)
49         {
50             int v = edge[i].v;
51             if((dis[u]-edge[i].y)*edge[i].x > dis[v])
52             {
53                 dis[v] = (dis[u]-edge[i].y)*edge[i].x;
54                 if(!vis[v])
55                 {
56                     vis[v] = 1;
57                     qu.push(v);
58                 }
59                 sum[v]++;
60                 if(sum[v] > m)
61                 return -1;
62             }
63         }
64     }
65     return 1;
66 }
67 void Init()
68 {
69     cnt = 0 ;
70     memset(head,-1,sizeof(head));
71     memset(sum,0,sizeof(sum));
72     while(!qu.empty())
73     qu.pop();
74 }
75 int main()
76 {
77     while(scanf("%d %d %d %lf",&m,&n,&num,&ount)!=EOF)
78     {
79         Init();
80         int u,v;
81         double x,y,xx,yy ;
82         for(int i = 0 ; i < n ; i++)
83         {
84             scanf("%d %d %lf %lf %lf %lf",&u,&v,&x,&y,&xx,&yy);
85             add(u,v,x,y);
86             add(v,u,xx,yy);
87         }
88         if(spfa(num) > 0)
89         cout<<"NO"<<endl;
90         else cout<<"YES"<<endl;
91     }
92     return 0;
93 }

View Code

http://blog.csdn.net/lyy289065406/article/details/6645778

这个大神用的是Bellman

转载于:https://www.cnblogs.com/luyingfeng/p/3255503.html

POJ1860Currency Exchange(SPFA)相关推荐

  1. Currency Exchange (SPFA)

    点击打开链接 Problem Description Several currency exchange points are working in our city. Let us suppose ...

  2. [kuangbin带你飞]专题四 最短路练习 B( POJ 2253) Frogger(spfa)

    B - Frogger(spfa) 题目链接:https://vjudge.net/contest/66569#problem/B 题目: Freddy Frog is sitting on a st ...

  3. 用RPC OVER HTTPS发布Exchange(续)

    用RPC OVER HTTPS发布Exchange(续) 接着上篇文章[url]http://shuangyang.blog.51cto.com/540829/123386[/url]继续介绍. 3. ...

  4. 最短路——最短路计数(spfa)

    题目链接 最短路--最短路计数(spfa) 题目描述 给出一个 N 个顶点 M 条边的无向无权图,顶点编号为 1-N.问从顶点 1 开始,到其他每个点的最短路有几条. 输入格式 第一行包含 2 个正整 ...

  5. 最短路——最短路(spfa)

    题目链接 最短路--最短路(spfa) 题目描述 简单暴力的题目要求: 给定一个有n个顶点(从1到n编号),m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从1号点到其他点的最短路. ...

  6. 香甜的黄油(SPFA)

    香甜的黄油(SPFA) Description 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好 ...

  7. P6770 [USACO05MAR]Checking an Alibi 不在场的证明(spfa)

    不在场的证明 题目传送门 解题思路 这题就和香甜的黄油(SPFA)差不多,改个输入和输出就AC了 AC代码 #include<algorithm> #include<iostream ...

  8. nyoj 1238 最少换乘(spfa)

    描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. 年轻人旅游不怕辛苦,不怕劳累,只要费用低就行.但Dr. Kong年过半百,他希望乘坐 ...

  9. 【NOIP2013】华容道 最短路优化搜索(spfa)

    华容道 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 34  Solved: 14 [Submit][Status][Web Board] Descr ...

最新文章

  1. oracle insert忽略重复数据,Oracle’INSERT ALL’忽略重复项
  2. jdbc在项目中的应用
  3. RabbitMQ 的引言
  4. opengl加载显示3D模型SMD类型文件
  5. 好玩的Scratch
  6. webpack进阶之插件篇
  7. 【产品干货】经典营销模型的产品化介绍
  8. 【视频教程】JEECG 入门视频教程
  9. UICamera(NGUI Event system)原理
  10. 换行与回车(\r \n)的起源以及在编制语言中的使用
  11. uv4:you are not logged in as an administrator
  12. 银行家算法的数组方式实现
  13. LOL易游网络验证破解总结
  14. MFC之打开(开发)映美精相机
  15. 使用pkg编译打包nodejs程序成执行文件
  16. HTML+CSS实现动态效果相册
  17. 前端HTML转PDF生成的PDF上边会有留白,下边截取不全
  18. 怎么批量新建文件夹并命名?
  19. Sourcetree安装详细(最新版本)
  20. udev和mdev两种热插拔机制

热门文章

  1. 风变编程Python9 函数的学习
  2. iframe框架_性能优化去除iframe脚手架升级方案
  3. 项目服务接口设计_Spring Boot Security 整合 OAuth2 设计安全API接口服务
  4. 2022年考研计算机组成原理_6 总线
  5. python如何退出模块_如何将一个 Python 函数进行模块化封装
  6. 自动拼图android github,GitHub - zero0011/Puzzle: 拼图游戏 , 可自动实现 拼图操作
  7. html5标签 不可修改,SEO优化不可忽视的5个Html代码标签
  8. kafka从头消费信息
  9. Hbase与zookeeper
  10. spark 字符串操作