<题目链接>

<转载于 >>> >

题目大意:

有多种汇币,汇币之间可以交换,这需要手续费,当你用100A币交换B币时,A到B的汇率是29.75,手续费是0.39,那么你可以得到(100 - 0.39) * 29.75 = 2963.3975 B币。问s币的金额经过交换最终得到的s币金额数能否增加。

货币的交换是可以重复多次的,所以我们需要找出是否存在正权回路,且最后得到的s金额是增加的

怎么找正权回路呢?(正权回路:在这一回路上,顶点的权值能不断增加即能一直进行松弛)

解题思路:

本题与bellman的目的刚好相反。即bellman本用于找负环,求最小路径,本题是利用同样的思想找正环,求最大路径,因此,改变一下初始化和松弛操作,再加上对正环的判定即可。

#include<iostream>
using namespace std; int n; //货币种数
int m; //兑换点数量
int s; //持有第s种货币,表示哪个点,代表起点
double v; //持有的s货币的本金 int all; //边总数
double dis[]; //s到各点的权值 class EDGE
{
public:
int a; //货币a
int b; //货币b
double r; //rate
double c; //手续费
}edge[]; void add(int u,int v,double vala,double valb){
edge[all].a=u,edge[all].b=v,edge[all].r=vala,edge[all++].c=valb;
} bool bellman()
{
memset(dis,,sizeof(dis)); //这里与bellman的目的刚好相反。初始化为源点到各点距离无穷小
dis[s]=v; //即bellman本用于找负环,求最小路径,本题是利用同样的思想找正环,求最大路径 /*relax*/ bool flag;
for(int i=;i<=n-;i++)
{
flag=false;
for(int j=;j<all;j++)
if(dis[edge[j].b] < (dis[edge[j].a] - edge[j].c) * edge[j].r) //寻找最长路径
{ //进行比较的是"某点到自身的权值"和"某点到另一点的权值"
dis[edge[j].b] = (dis[edge[j].a] - edge[j].c) * edge[j].r;
flag=true;
}
if(!flag) //如果不能更新了,就直接跳出
break;
} /*Search Positive Circle*/ for(int k=;k<all;k++)
if(dis[edge[k].b] < (dis[edge[k].a] - edge[k].c) * edge[k].r) //正环能够无限松弛
return true;
return false;
} int main()
{
int a,b;
double rab,cab,rba,cba;
while(cin>>n>>m>>s>>v)
{
all=;
for(int i=;i<m;i++) //构建无向边
{
cin>>a>>b>>rab>>cab>>rba>>cba;
add(a,b,rab,cab);
add(b,a,rba,cba);
} /*Bellman-form Algorithm*/ if(bellman()) //存在正环
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
} return ;
}

2018-08-27

POJ1860-Currency Exchange (正权回路)【Bellman-Ford】的更多相关文章

  1. 图论 --- spfa + 链式向前星 : 判断是否存在正权回路 poj 1860 : Currency Exchange

    Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 19881   Accepted: 711 ...

  2. Currency Exchange 货币兑换 Bellman-Ford SPFA 判正权回路

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

  3. poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)

    链接:poj 1860 题意:给定n中货币.以及它们之间的税率.A货币转化为B货币的公式为 B=(V-Cab)*Rab,当中V为A的货币量, 求货币S通过若干此转换,再转换为原本的货币时是否会添加 分 ...

  4. POJ 1860 Currency Exchange(最短路&spfa正权回路)题解

    题意:n种钱,m种汇率转换,若ab汇率p,手续费q,则b=(a-q)*p,你有第s种钱v数量,问你能不能通过转化让你的s种钱变多? 思路:因为过程中可能有负权值,用spfa.求是否有正权回路,dis[ ...

  5. POJ1860——Currency Exchange(BellmanFord算法求最短路)

    Currency Exchange DescriptionSeveral currency exchange points are working in our city. Let us suppos ...

  6. [ACM] hdu 1217 Arbitrage (bellman_ford最短路,推断是否有正权回路或Floyed)

    Arbitrage Problem Description Arbitrage is the use of discrepancies in currency exchange rates to tr ...

  7. POJ1860:Currency Exchange(BF)

    http://poj.org/problem?id=1860 Description Several currency exchange points are working in our city. ...

  8. Bellman_ford货币兑换——正权回路判断

    POJ1860 题目大意:你在某一点有一些钱,给定你两点之间钱得兑换规则,问你有没有办法使你手里的钱增多.就是想看看转一圈我的钱能不能增多,出现这一点得条件就是有兑换钱得正权回路,所以选择用bellm ...

  9. HDU - 1317 ~ SPFA正权回路的判断

    题意:有最多一百个房间,房间之间连通,到达另一个房间会消耗能量值或者增加能量值,求是否能从一号房间到达n号房间. 看数据,有定5个房间,下面有5行,第 iii 行代表 iii 号 房间的信息,第一个数 ...

随机推荐

  1. 信息收集之censys

    一.摘要 Censys提供了search.view.report.query.export以及data六种API接口. search接口的请求地址是https://www.censys.io/api/ ...

  2. cartographer 安装问题

    安装主要参考hitcm教程: http://www.cnblogs.com/hitcm/p/5939507.html 这里只说安装过程中遇到的问题, ceres-solver 与 eigen3 版本不 ...

  3. Python基础-封装与扩展、静态方法和类方法

    一.封装与扩展 封装在于明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者的代码:而外部使用者只知道一个接口(函数),只要接口(函数)名.参数不变,使用者的代码永远无需改变.这就提供一个 ...

  4. 004_i686和x86_64的区别

    找回TCL隐藏分区(转载) 用Wubi安装 Ubuntu 出现(Initranfs)问题的解决方案 i686和x86_64的区别 2009-04-11 08:19:31|  分类: 电脑问题 |  标 ...

  5. centos6.5环境基于corosync+cman+rgmanager实现RHCS及iscsi+gfs2+clvm的文件系统集群

    centos6.5环境基于corosync+cman+rgmanager实现RHCS及iscsi+gfs2+clvm文件系统集群 一.环境准备 服务器列表: ansible server : 192. ...

  6. MyEclipse中将项目的编码从默认GBK改变为默认UTF-8

  7. Ex 6_19 至多用k枚硬币兑换价格_第七次作业

    子问题定义: 定义一个二维数组b,其中b[i][j]表示用i个硬币是否能兑换价格j,表示第i个币种的面值, 递归关系: 初值设定: 求解顺序: 按下标从小到大依次求解数组b每一列的值,最后二维数组b的 ...

  8. [转]MySQL中函数CONCAT及GROUP_CONCAT

    一.CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串. 使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为 +-- ...

  9. UDP template 代码

    服务端 from socket import * import json,struct client= socket(AF_INET,SOCK_STREAM) client.connect(('127 ...

  10. 【前端】三个bug

    目录 一.Array对象的indexOf() 二.使用jquery,clone()下拉框问题 三.jquery获取获取html5的data-*属性 一.Array对象的indexOf() 1.inde ...