传送门: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. uni-app实现弹窗遮罩

    <template> <view> <view class="systemboxItem" @click="showSystemDialog ...

  2. 51nod:天堂里的游戏

    天堂里的游戏 李陶冶 (命题人) System Message (测试) 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 多年后,每当Noder看到吉普赛人,就会想起那个遥远的下午. ...

  3. mongodb单机版的安装和配置

    首先根据操作系统下载MongoDB的相关安装文件 下载后上传到linux上,解压 将解压后的文件夹重新命名为monggodb4.0.1 命令mv 配置必要的文件夹mgdata存放运行数据,mglog存 ...

  4. [洛谷Luogu]P1803 线段覆盖问题

    贪心想法题解的各位dalaodalaodalao都讲得很清楚了,在下就提供一种桶排的做法吧. 因为给出数据范围 0≤ai<bi≤10000000≤ai<bi≤10000000≤ai< ...

  5. Spring课程 Spring入门篇 7-3 advice扩展

    课程链接: 1 解析 1.1 advice中aspect 切面传参 1.2 通知参数名称——argNames属性, 参数为 JoinPoint.ProceedingJoinPoint.JoinPoin ...

  6. 用 Python监控了另一半的每天都在看的网站,我发现了一个秘密

    ​ 阅读文本大概需要 5 分钟. ! 需求: (1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中 (2)将这个txt文件发送给指定的邮箱地址(你的邮 ...

  7. HDU 2586 LCA-Tarjan

    还是LCA-tarjan算法,跟POJ 1330做法基本类似,只是这个题目要求输出两个点的最短距离,其实利用LCA的性质,就是 两个点分别到最近公共祖先的距离之和 一开始本来想用并查集把路径长度给找出 ...

  8. css mix-blend-mode 颜色滤镜混合模式

    CSS3混合模式种类 在CSS3混合模式中,目前仅有16种:normal,multiply,screen,overlay,darken,lighten,color-dodge,color-burn,h ...

  9. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-italic

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  10. robotframework+selenium2Library怎样不用手动关掉代理

    每次跑脚本,启动浏览器都要手动关掉代理,太费劲了,发现最简单的办法就是在局域网设置里面勾上跳过本地地址的代理服务器,并且在例外里写上127.0.0.1 就这么简单有没有??