传送门: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模板题】的更多相关文章

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

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

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

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

  3. POJ 1860 Currency Exchange 最短路+负环

    原题链接:http://poj.org/problem?id=1860 Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Tota ...

  4. POJ 1860 Currency Exchange + 2240 Arbitrage + 3259 Wormholes 解题报告

    三道题都是考察最短路算法的判环.其中1860和2240判断正环,3259判断负环. 难度都不大,可以使用Bellman-ford算法,或者SPFA算法.也有用弗洛伊德算法的,笔者还不会SF-_-…… ...

  5. POJ 1860 Currency Exchange (最短路)

    Currency Exchange Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 60000/30000K (Java/Other) T ...

  6. POJ 1860 Currency Exchange【bellman_ford判断是否有正环——基础入门】

    链接: http://poj.org/problem?id=1860 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  7. POJ 1860 Currency Exchange (最短路)

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

  8. POJ 1860——Currency Exchange——————【最短路、SPFA判正环】

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

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

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

随机推荐

  1. 修改tomcat的字符集问题

    转 默认情况下,tomcat使用的是iso8859-1的编码编码方式,浏览器的embed标签中src指向的地址要通过tomcat去解析.如果包含中文,采用这种编码方式就会出现乱码问题,而在这种情况下, ...

  2. Java 二叉树深度 判断平衡二叉树

    package cookie; public class BTreeDepthIsBalanced { int depth(BNode head) { if (head == null) { retu ...

  3. Codeforces 176B 经典DP

    非常好的一个题目,CF上的DP都比较经典 题意就是 给定一个串A,B,正好执行K次操作,每次操作可以把 A串从中间切开,并调换两部分的位置,问最后得到B串共有多少种不同的切法(只要中间有一次不同,即视 ...

  4. 公告上下滚动基于Jquery

    前提  需要引入jquery  如果你用的单位不是px  修改的同时红色部分需保持一致 <!DOCTYPE html> <html> <head> <meta ...

  5. python 同步异步,并发并行,同步锁

    并发:系统具有处理多个任务(动作)的能力 并行:系统具有同时处理多个任务(动作)的能力 同步:当进程执行到一个IO(等待外部数据)的时候,需要等待,等待即同步 异步:当进程执行到一个IO(等待外部数据 ...

  6. 模块化es6规范

    阮一峰Module 的语法 1.概述 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来. 在 ES6 之前,社区制定了一些 ...

  7. 2.2 学习总结 之 servlet 的两次抽取

    说在前面 昨天 完成了文件上出的学习和实践 今天 学习servlet的两次抽取,以加快编写工程的速度 一.servlet 抽取的原因: 刚刚学习使用servlet写后台,往往只使用一个servlet来 ...

  8. TX2开发板Ubuntu16.04安装中文输入法

    打开终端输入安装输入法: sudo apt-get install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin ...

  9. ng-repeat动态生成的DOM如何获取宽度(封装好的方法)

    define(['custom/bootstrapApp'],function(app){ app.filter('getTabWidth',function(){ return function(a ...

  10. foreach —(遍历数组或循环中的字符,以获取信息)

    namespace ConsoleApplication2{ class Program {//letter 字母 gigit 数字 symbol 符号 static void Main(string ...