题目链接:https://vjudge.net/problem/POJ-1860

大致题意:有不同的货币,有很多货币交换点,每个货币交换点只能两种货币相互交换,有佣金C,汇率R。
每次交换算一次操作,问能不能经过一系列操作使得本来的货币的本金数额变大。
思路:相当于图,“一系列操作使得本金数额变大”说明有一个正的回路,能使得某种货币的数额增大,那么,
只要有这一个正的回路,那么我们一定可以让某种货币的数额变为无穷大,那么本来的货币的本金数额变大是一定的,
所有,我们只需要判断图中是否出现了一个正回路,有的话说明可以,一个没有说明都是负环,说明不能。
(这里有一个误区,只判断一次货币交换情况及就判断,可能A货币换成B货币的佣金很大或者汇率很低,那么只要我们有一个正环,
使得B的货币数额变为正无穷大,那么经过一系列操作后最后A的货币数额一定是增大的)
有负环,这里用bellman_ford算法也可以通过。

 #include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <string>
#include <vector>
using namespace std; typedef long long LL;
#define inf (1LL << 30) - 1
#define rep(i,j,k) for(int i = (j); i <= (k); i++)
#define rep__(i,j,k) for(int i = (j); i < (k); i++)
#define per(i,j,k) for(int i = (j); i >= (k); i--)
#define per__(i,j,k) for(int i = (j); i > (k); i--) const int N = ;
int n,m,s;
double v;
int U,V;
double Ruv,Cuv,Rvu,Cvu;
double value[N]; struct node{
int u,v;
double r,c;
}; vector<node> E; void input(){ rep(i,,m){
cin >> U >> V >> Ruv >> Cuv >> Rvu >> Cvu;
E.push_back( node{U,V,Ruv,Cuv} );
E.push_back( node{V,U,Rvu,Cvu} );
}
} bool bellman_ford(){ value[s] = v; //其他的货币数额都为0,s的货币金额为V bool flag = true;
rep(i,,n){
flag = false;//每次赋值false,检测下面循环还能不能进行更新操作
for(int j = ; j < E.size(); j++){//遍历所有交换情况
//如果A->B 能使得B的货币金额变大,就更新
if(value[E[j].v] < (value[E[j].u] - E[j].c) * E[j].r){
value[E[j].v] = (value[E[j].u] - E[j].c) * E[j].r;
} flag = true;//进行了更新操作
}
if(!flag) break;//无法再进行更新操作
} //如果出现A->B 能使得B的货币金额变大,说明有一个正环
for(int j = ; j < E.size(); j++){
if(value[E[j].v] < (value[E[j].u] - E[j].c) * E[j].r) return true;
}
//遍历所有,都没出现正环,说明只有负环
return false;
} int main(){ ios::sync_with_stdio(false);
cin.tie(); cin >> n >> m >> s >> v;
input();
if (bellman_ford()) cout << "YES" << endl;
else cout << "NO" << endl; getchar();getchar();
return ;
}

kuangbin专题专题四 Currency Exchange POJ - 1860的更多相关文章

  1. (最短路 SPFA)Currency Exchange -- poj -- 1860

    链接: http://poj.org/problem?id=1860 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 2326 ...

  2. Currency Exchange POJ - 1860 (spfa)

    题目链接:Currency Exchange 题意: 钱的种类为N,M条命令,拥有种类为S这类钱的数目为V,命令为将a换成b,剩下的四个数为a对b的汇率和a换成b的税,b对a的汇率和b换成a的税,公式 ...

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

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

  4. Currency Exchange - poj 1860

    Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 22111   Accepted: 7986 Description Seve ...

  5. Currency Exchange POJ - 1860 spfa判断正环

    //spfa 判断正环 #include<iostream> #include<queue> #include<cstring> using namespace s ...

  6. poj - 1860 Currency Exchange Bellman-Ford 判断正环

    Currency Exchange POJ - 1860 题意: 有许多货币兑换点,每个兑换点仅支持两种货币的兑换,兑换有相应的汇率和手续费.你有s这个货币 V 个,问是否能通过合理地兑换货币,使得你 ...

  7. 最短路(Bellman_Ford) POJ 1860 Currency Exchange

    题目传送门 /* 最短路(Bellman_Ford):求负环的思路,但是反过来用,即找正环 详细解释:http://blog.csdn.net/lyy289065406/article/details ...

  8. POJ 1860 Currency Exchange (最短路)

    Currency Exchange Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u S ...

  9. POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环)

    POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环) Description Several currency ...

随机推荐

  1. 【转】Web实现前后端分离,前后端解耦

    一.前言 ”前后端分离“已经成为互联网项目开发的业界标杆,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦.并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构 ...

  2. 基于 SpringBoot2.0+优雅整合 SpringBoot+Mybatis

    SpringBoot 整合 Mybatis 有两种常用的方式,一种就是我们常见的 xml 的方式 ,还有一种是全注解的方式.我觉得这两者没有谁比谁好,在 SQL 语句不太长的情况下,我觉得全注解的方式 ...

  3. Spring Security教程之基于表达式的权限控制(九)

    目录 1.1      通过表达式控制URL权限 1.2      通过表达式控制方法权限 1.2.1     使用@PreAuthorize和@PostAuthorize进行访问控制 1.2.2   ...

  4. elasticsearch 分片的创建 集群重启分片运作

    2016年11月12日ENGINEERING Every shard deserves a home 作者 Joshua Backing Share Here are some great slide ...

  5. Docker方式安装SonarQube

    获取镜像 docker pull postgres: docker pull sonarqube:-community 启动镜像 docker run -d -p : -e POSTGRES_PASS ...

  6. Java8 新特性 Lamdba表达式

    Lamdba 表达式为什么出现   Java8是自java延生以来最大的改变,他允许java中的方法和函数成为一等公民(可以在方法间传递),所以就应运而出现了Lamdba表达式,他可以将表达式传递给另 ...

  7. [转帖]自动交互式脚本--expect

    自动交互式脚本--expect https://www.cnblogs.com/zhuiluoyu/p/4873869.html 我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器 ...

  8. How to let your website login with domain account when using IIS to deploy it?

    如何让你的网站以域账号登录 Select your website in IIS Manager, open Authentication, enable Windows Authentication ...

  9. (一)使用phantomjs将动态HTML页面生成图片

    因为工作需要,笔者需要将一个动态的HTML5页面生成图片,并将图片发送给用户. 其中难点在于怎样将动态H5生成图片 笔者翻阅资料后,决定使用phantomjs这个插件,关于这个插件的安装,非常简单,笔 ...

  10. .NET / C# HTTP中的GET和PSOT

    需要引入using System.IO;using System.Net; public string GETs(string URL) { //创建httpWebRequest对象 HttpWebR ...