POJ1860---Currency Exchange (最短路:验证是否存在正环)
来源:互联网 发布:mysql数据库书籍 编辑:程序博客网 时间:2024/06/06 03:30
【题目来源】:https://vjudge.net/problem/POJ-1860
【题意】
有多种汇币,给出从A币到B币的汇率和手续费。计算公式:
money(B)=(money(A)-手续费)*汇率。
给出本金钱数和钱币的类型,问经过转换汇币类型是否能够增加钱的数目。
【思路】
这道题也就是要求验证是否存在正环,若是存在正环,那么钱数一定会增加。关键是怎么验证是否存在正环。
验证是否存在负环很容易,bellman个spfa都可以:推荐博客:验证负环,然后,验证负换可以简单地把bellman算法反过来用就行。本题是“求最大路径”,之所以被归类为“求最小路径”是因为本题题恰恰与bellman-Ford算法的松弛条件相反,求的是能无限松弛的最大正权路径,初始化d(S)=V 而源点到其他店的距离(权值)初始化为无穷小(0),当s到其他某点的距离能不断变大时,说明存在最大路径。
【代码】
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int INF=0x3f3f3f3f;int n,m,s,l;double money;struct p{ int u,v; double point,pound;} edge[200+10];double d[100+10];bool bellman(){ for(int i=1; i<=n; i++) d[i]=0; d[s]=money; for(int i=1; i<=n-1; i++) { bool flag=1; for(int j=0; j<l; j++) { double t= (d[edge[j].u]-edge[j].pound)*edge[j].point; if(d[edge[j].v]<t) { d[edge[j].v]=t; flag=0; } } if(flag) return 0; } for(int i=0; i<l; i++) { double t= (d[edge[i].u]-edge[i].pound)*edge[i].point; if(d[edge[i].v]<t) return 1; } return 0;}int main(){ l=0; scanf("%d%d%d%lf",&n,&m,&s,&money); for(int i=1; i<=m; i++)//输入m条边。。不对,是2*m,,, { int u,v; double po1,pr1,po2,pr2; scanf("%d%d%lf%lf%lf%lf",&u,&v,&po1,&pr1,&po2,&pr2); edge[l].u=u; edge[l].v=v; edge[l].point=po1; edge[l++].pound=pr1; edge[l].u=v; edge[l].v=u; edge[l].point=po2; edge[l++].pound=pr2; } if(bellman()) printf("YES\n"); else printf("NO\n");}
阅读全文
0 0
- POJ1860---Currency Exchange (最短路:验证是否存在正环)
- poj1860 Currency Exchange 最短路变形 spfa 判环 思考
- poj1860 Currency Exchange(货币交换,最短路问题)
- POJ1860--Currency Exchange(最短路Bellman_Ford)
- POJ1860 Currency Exchange 最短路bellman-ford
- POJ1860 Currency Exchange(最短路径,有无正环,模板)
- poj1860 Currency Exchange floyd判断正环 (手动翻译)
- poj1860 Currency Exchange(flody)
- POJ2240---Arbitrage(最短路:验证是否正环)
- POJ1860 Currency Exchange(最短路径)
- POJ 1860 Currency Exchange (BellmanFord算法逆用 判断图是否存在正环)
- POJ 1860 Currency Exchange (寻找是否存在正权回路)
- poj 1860 -- Currency Exchange(最短路)
- poj 1860 Currency Exchange (最短路)
- POJ - 1860 Currency Exchange(最短路)
- POJ 1860 Currency Exchange(最短路)
- poj1860——Currency Exchange(Eellman-Ford+权值为正的环路)
- 最短路(Bellman_ford) Currency Exchange
- 欢迎使用CSDN-markdown编辑器
- android Spannable修改text颜色
- 线段树
- Accessible Map——访问地图
- 前端调试必备技巧(控制台使用完全指南)
- POJ1860---Currency Exchange (最短路:验证是否存在正环)
- prevent deception,舞步学院教你预防爱情网骗
- Eclipse快捷键 10个最有用的快捷键
- 左边下拉框点击后选项移动到右边下拉框
- mysql错误:Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE)
- 英语——长难句分析及技巧
- smarty模板使用详细教程
- 《UNIX环境高级编程》第15章 进程间通信
- Python爬虫实战:2017中国最好大学排名