POJ 1860 Currency Exchange【bellman-Ford模板题】
传送门:http://poj.org/problem?id=1860
题意:给出每两种货币之间交换的手续费和汇率,求出从当前货币s开始交换回到s,能否使本金增多。
思路:bellman-Ford模板题。直接跑一遍,判断是否存在正环就好了。(复杂度n*m)
代码:
#include<iostream>
using namespace std;
int n; //货币种数
int m; //兑换点数量
int s; //持有第s种货币
double v; //持有的s货币的本金
double dis[101]; //s到各点的权值
struct node
{
int a; //货币a
int b; //货币b
double r; //汇率
double c; //手续费
} num[202];
bool Bellman_Ford()
{
for(int i = 1; i <= n; i++)
dis[i] = 0;
//初始源点的值即为本金
dis[s] = v;
for(int i = 1; i < n; i++)
{
bool flag = false;
for(int j = 1; j <= 2 * m; j++)
{
if(dis[num[j].b] < (dis[num[j].a] - num[j].c)*num[j].r)
{
dis[num[j].b] = (dis[num[j].a] - num[j].c) * num[j].r;
flag = true;
}
}
if(!flag)
break;
}
//如果还能增加,则代表存在正环
for(int j = 1; j <= 2 * m; j++)
{
if(dis[num[j].b] < (dis[num[j].a] - num[j].c) * num[j].r)
return true;
}
return false;
}
int main()
{
while(cin >> n >> m >> s >> v)
{
for(int i = 1; i <= 2 * m; i += 2)
{
cin >> num[i].a >> num[i].b >> num[i].r >> num[i].c >> num[i + 1].r >> num[i + 1].c;
num[i + 1].a = num[i].b;
num[i + 1].b = num[i].a;
}
if(Bellman_Ford())
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
}
}
POJ 1860 Currency Exchange【bellman-Ford模板题】的更多相关文章
- 最短路(Bellman_Ford) POJ 1860 Currency Exchange
题目传送门 /* 最短路(Bellman_Ford):求负环的思路,但是反过来用,即找正环 详细解释:http://blog.csdn.net/lyy289065406/article/details ...
- POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环)
POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环) Description Several currency ...
- POJ 1860 Currency Exchange 最短路+负环
原题链接:http://poj.org/problem?id=1860 Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Tota ...
- POJ 1860 Currency Exchange + 2240 Arbitrage + 3259 Wormholes 解题报告
三道题都是考察最短路算法的判环.其中1860和2240判断正环,3259判断负环. 难度都不大,可以使用Bellman-ford算法,或者SPFA算法.也有用弗洛伊德算法的,笔者还不会SF-_-…… ...
- POJ 1860 Currency Exchange (最短路)
Currency Exchange Time Limit : 2000/1000ms (Java/Other) Memory Limit : 60000/30000K (Java/Other) T ...
- POJ 1860 Currency Exchange【bellman_ford判断是否有正环——基础入门】
链接: http://poj.org/problem?id=1860 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- POJ 1860 Currency Exchange (最短路)
Currency Exchange Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u S ...
- POJ 1860——Currency Exchange——————【最短路、SPFA判正环】
Currency Exchange Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u S ...
- poj - 1860 Currency Exchange Bellman-Ford 判断正环
Currency Exchange POJ - 1860 题意: 有许多货币兑换点,每个兑换点仅支持两种货币的兑换,兑换有相应的汇率和手续费.你有s这个货币 V 个,问是否能通过合理地兑换货币,使得你 ...
随机推荐
- [YOLO]《You Only Look Once: Unified, Real-Time Object Detection》笔记
一.简单介绍 目标检测(Objection Detection)算是计算机视觉任务中比较常见的一个任务,该任务主要是对图像中特定的目标进行定位,通常是由一个矩形框来框出目标. 在深度学习CNN之前,传 ...
- LCT(2)
LCT(2) 关于 LCT 的基本操作和代码实现见 (1) . 5. LCT的应用 5.0 LCT 裸题 就是LCT的基本操作模板题,常出现于早年省选.不讨论. 5.1 LCT维护子树信息 很多时候, ...
- Delphi MD5
unit uMD5; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics; type MD5Count = ...
- 解决Spring Mvc中接受参数绑定重名的方法
html页面 <form method='post' action='url'> 用户名 <input type='text' name='name'> 用户id <in ...
- Day 22:网络编程(3)
TCP通讯协议特点: 1. tcp是基于IO流进行数据 的传输的,面向连接. 2. tcp进行数据传输的时候是没有大小限制的. 3. tcp是面向连接,通过三次握手的机制保证数据的完整性.可靠协 ...
- 每天一点点之laravel框架 - Laravel5.6 + Passport实现Api接口认证
1.首先通过 Composer 包管理器安装 Passport: composer require laravel/passport 注:如果安装过程中提示需要更高版本的 Laravel:larave ...
- c\c++ 中字符串分割,并且转换为整形数据
在项目开发中,经常使用到字符串分割, 并且将其转换为整形(比如IP的分割获取,MAC地址的分割获取等),代码如下: #ifndef _UNICODE void StrToIntData( char * ...
- JS下拉框联动
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 一、CI框架(CodeIgniter)简介
CI是一个非常好用,非常灵活的PHP框架,在官网https://codeigniter.org.cn/ :最新版本3.1.10 版 就可以尽情使用了. 不忘初心,如果您认为这篇文章有价值,认同作者的付 ...
- swift之保存数据到keychain
访问KeyChain 1.在mac上按下 Command+Space 输入Keychain Access 2.在终端输入security find-generic-password -help 读取配 ...