poj1860 & poj2240(Bellman-Ford)
1860的思路是将可以换得的不同种的货币的数量当作节点,每个兑换点当成边,然后我抄了个算法导论里面的Bellman-Ford算法,一次就过了。看discussion里面很多讨论精度的,我想都没想过……
2240是更简单的一个bellman-ford,基本和1860一样,就只多了个map容器的应用而已。
以下是1860:
#include <iostream>
using namespace std; struct Point{
int a, b;
double Rab, Cab, Rba, Cba;
}; int main()
{
int n, m, s;
double money;
Point point[];
cin >> n >> m >> s >> money;
for (int i = ; i < m; i++){
cin >> point[i].a >> point[i].b
>> point[i].Rab >> point[i].Cab
>> point[i].Rba >> point[i].Cba;
}
double node[];
memset(node, , sizeof(node));
node[s] = money;
for (int j = ; j <= n - ; j++){
for (int i = ; i < m; i++){
if (node[point[i].a] < (node[point[i].b] - point[i].Cba) * point[i].Rba)
node[point[i].a] = (node[point[i].b] - point[i].Cba) * point[i].Rba;
if (node[point[i].b] < (node[point[i].a] - point[i].Cab) * point[i].Rab)
node[point[i].b] = (node[point[i].a] - point[i].Cab) * point[i].Rab;
}
}
bool flag = true;
for (int i = ; i < m; i++){
if (node[point[i].a] < (node[point[i].b] - point[i].Cba) * point[i].Rba
|| node[point[i].b] < (node[point[i].a] - point[i].Cab) * point[i].Rab){
flag = false;
break;
}
}
cout << (flag ? "NO" : "YES") << endl;
return ;
}
2240:
#include <iostream>
#include <map>
#include <string>
using namespace std; struct Edge{
int type1, type2;
double rate;
}; int main()
{
int n;
int testCase = ;
while (cin >> n && n != ){
double node[];
Edge edge[];
map<string, int> currency;
for (int i = ; i < n; i++){
string type;
cin >> type;
currency[type] = i;
}
int m;
cin >> m;
for (int i = ; i < m; i++){
string type1, type2;
double r;
cin >> type1 >> r >> type2;
edge[i].type1 = currency[type1];
edge[i].type2 = currency[type2];
edge[i].rate = r;
}
for (int i = ; i < n; i++){
node[i] = ;
}
node[] = ;
for (int i = ; i <= n - ; i++){
for (int j = ; j < m; j++){
double tmp = node[edge[j].type1] * edge[j].rate;
if (node[edge[j].type2] < tmp){
node[edge[j].type2] = tmp;
}
}
}
bool flag = false;
for (int i = ; i < m; i++){
if (node[edge[i].type2] < node[edge[i].type1] * edge[i].rate){
flag = true;
break;
}
}
cout << "Case " << testCase << ": " << (flag ? "Yes" : "No") << endl;
testCase++;
}
return ;
}
poj1860 & poj2240(Bellman-Ford)的更多相关文章
- poj1860 bellman—ford队列优化 Currency Exchange
Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 22123 Accepted: 799 ...
- ACM/ICPC 之 最短路径-Bellman Ford范例(POJ1556-POJ2240)
两道Bellman Ford解最短路的范例,Bellman Ford只是一种最短路的方法,两道都可以用dijkstra, SPFA做. Bellman Ford解法是将每条边遍历一次,遍历一次所有边可 ...
- uva 558 - Wormholes(Bellman Ford判断负环)
题目链接:558 - Wormholes 题目大意:给出n和m,表示有n个点,然后给出m条边,然后判断给出的有向图中是否存在负环. 解题思路:利用Bellman Ford算法,若进行第n次松弛时,还能 ...
- Bellman—Ford算法思想
---恢复内容开始--- Bellman—Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题.对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数w是边集E的映射.对图G ...
- Bellman - Ford 算法解决最短路径问题
Bellman - Ford 算法: 一:基本算法 对于单源最短路径问题,上一篇文章中介绍了 Dijkstra 算法,但是由于 Dijkstra 算法局限于解决非负权的最短路径问题,对于带负权的图就力 ...
- poj1860 兑换货币(bellman ford判断正环)
传送门:点击打开链接 题目大意:一个城市有n种货币,m个货币交换点,你有v的钱,每个交换点只能交换两种货币,(A换B或者B换A),每一次交换都有独特的汇率和手续费,问你存不存在一种换法使原来的钱更多. ...
- Dijkstra算法与Bellman - Ford算法示例(源自网上大牛的博客)【图论】
题意:题目大意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离 poj2387 Description Bessie is out in the field and ...
- POJ 2240 Arbitrage (Bellman Ford判正环)
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions:27167 Accepted: 11440 Descri ...
- poj1860(Bellman—fold)
题目连接:http://poj.org/problem?id=1860 Description Several currency exchange points are working in our ...
- ACM/ICPC 之 Bellman Ford练习题(ZOJ1791(POJ1613))
这道题稍复杂一些,需要掌握字符串输入的处理+限制了可以行走的时间. ZOJ1791(POJ1613)-Cave Raider //限制行走时间的最短路 //POJ1613-ZOJ1791 //Time ...
随机推荐
- SpringCloud(二)注册服务提供者搭建
上文已经写了如何去搭建注册中心,仅有注册中心是远远不够的,所以我们需要注册到注册中心并提供服务的节点,这里称为注册服务提供者 前提 阅读上文,并成功搭建注册中心,环境无需改变 项目搭建 这里我们需要新 ...
- 如何发布一个自定义Node.js模块到NPM(详细步骤,附Git使用方法)
咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...
- HTML5文件上传器,纯脚本无插件的客户端文件上传器---Uploader 文件上传器类
概述 客户端完全基于JavaScript的 浏览器文件上传器,不需要任何浏览器插件,但需要和jQuery框架协同工作,支持超大文件上传,其算法是将一个超大文件切片成N个数据块依次提交给服务 端处理,由 ...
- Lua只读表
利用Lua的元表(metatable)和元函数(metafunction)可以很简单的实现此功能. 其实现大致分为三个部分 1.禁止在表中创建新值 2.禁止改变已有的值 3.将子表也变为只读 1.禁止 ...
- 【CodeForces】889 B. Restoration of string
[题目]B. Restoration of string [题意]当一个字符串在字符串S中的出现次数不小于任意子串的出现次数时,定义这个字符串是高频字符串.给定n个字符串,求构造出最短的字符串S满足着 ...
- 面向对象 ( OO ) 的程序设计——继承
本文地址:http://www.cnblogs.com/veinyin/p/7608282.html 仅支持实现继承,且主要依靠原型链来实现,不过一般会混合构造函数一起实现继承 1 原型链 继承使用 ...
- Findbugs插件安装与使用
FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具.FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析.FindBug ...
- C#开发微信公众平台开发-微信海报介绍和开发流程
“让客户发展客户”,微信海报才是微信公众平台最高明的吸粉手段,海报上有粉丝的专属二维码,有粉丝的头像及商户宣传的广告等.新粉丝扫描这个专属二维码会关注公众号,同时分享海报的粉丝会增加积分换取礼品或者优 ...
- vundle+vim8+php+xdebug
vundle 一开始容易被坑,vundle的运行方法是自己下载,不是自己下载,在安装上vundle后,直接修改~/.vimrc中,Plugin增加插件,然后运行PluginInstall即可安装 vi ...
- Minimum Palindromic Factorization(最少回文串分割)
Minimum Palindromic Factorization(最少回文串分割) 以下内容大部分(可以说除了关于回文树的部分)来自论文A Subquadratic Algorithm for Mi ...