https://vjudge.net/problem/POJ-2240

题意

已知n种货币,以及m种货币汇率及方式,问能否通过货币转换,使得财富增加。

分析

Bellman-Ford判断正环,注意初始化时置为0。

#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map> using namespace std;
int n,m;
double dist[]; //注意类型为 double
struct edge //边的结构体,st为起点,ed为终点,rt为汇率
{
int st,ed;
double rt;
edge(int sst,int eed,double rtt) : st(sst),ed(eed),rt(rtt) {}
edge() {}
}; vector<edge> G;
map<string ,int> mp; bool Bellman_ford(int v)
{
memset(dist,,sizeof(dist));
dist[v] = ;
for(int j = ;j < n;j++) { // n - 1 次松弛操作
for(int i = ;i < G.size();i++) {
int p1 = G[i].st,p2 = G[i].ed;
if(dist[p2] < dist[p1] * G[i].rt) {
dist[p2] = dist[p1] * G[i].rt;
}
}
}
for(int i = ;i < G.size();i++){
int p1 = G[i].st,p2 = G[i].ed;
if(dist[p2] < dist[p1] * G[i].rt) { //第 n 次松弛可以得到更优解,则存在环
return true;
}
}
return false;
} int main()
{
int cas = ;
string s,ss;
while(~scanf("%d",&n) &&n) {
for(int i = ;i < n;i++) {
cin >> s;
mp[s] = i; //货币名 s 的顶点编号 为 i
}
cin >> m;
string beg,ends;
double r;
G.clear();
for(int i = ;i < m;i++) {
cin >> beg >> r >> ends; //边的信息读取
G.push_back(edge (mp[beg] ,mp[ends] ,r) );
}
printf("Case %d: ",cas++);
for(int i = ;i < n;i++) { //枚举所有开始的起点
if(Bellman_ford(i)) { //存在环
cout << "Yes" << endl;
//printf("bellman %d\n",i);
break;
}
else if(i == n - )
cout << "No" <<endl;
}
}
return ;
}

POJ - 2240 Arbitrage(Bellman-Ford)的更多相关文章

  1. poj 2240 Arbitrage 题解

    Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21300   Accepted: 9079 Descri ...

  2. 最短路(Floyd_Warshall) POJ 2240 Arbitrage

    题目传送门 /* 最短路:Floyd模板题 只要把+改为*就ok了,热闹后判断d[i][i]是否大于1 文件输入的ONLINE_JUDGE少写了个_,WA了N遍:) */ #include <c ...

  3. POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环)

    POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环) Description Arbi ...

  4. poj 2240 Arbitrage (Floyd)

    链接:poj 2240 题意:首先给出N中货币,然后给出了这N种货币之间的兑换的兑换率. 如 USDollar 0.5 BritishPound 表示 :1 USDollar兑换成0.5 Britis ...

  5. POJ 2240 Arbitrage (Bellman Ford判正环)

    Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:27167   Accepted: 11440 Descri ...

  6. POJ 2240 Arbitrage【Bellman_ford坑】

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

  7. POJ 2240 Arbitrage(判正环)

    http://poj.org/problem?id=2240 题意:货币兑换,判断最否是否能获利. 思路:又是货币兑换题,Belloman-ford和floyd算法都可以的. #include< ...

  8. poj 2240 Arbitrage

    Time Limit: 1000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u   Java class name ...

  9. poj 2240 Arbitrage bellman-ford算法

    点击打开链接 Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13434   Accepted: 5657 ...

  10. POJ 2240 Arbitrage(floyd)

    http://poj.org/problem?id=2240 题意 : 好吧,又是一个换钱的题:套利是利用货币汇率的差异进行的货币转换,例如用1美元购买0.5英镑,1英镑可以购买10法郎,一法郎可以购 ...

随机推荐

  1. EF查询百万级数据的性能测试--单表查询

    一.起因  个人还是比较喜欢EF的,毕竟不用写Sql,开发效率高,操作简单,不过总是听人说EF的性能不是很好,也看过别人做的测试,但是看了就以为真的是那样.但是实际上到底是怎么样,说实话我真的不知道. ...

  2. winform 保存文件 打开文件 选择文件 字体样式颜色(流 using System.IO;)

    string filePath = ""; private void 保存SToolStripMenuItem_Click(object sender, EventArgs e) ...

  3. 如何在内网安装compass

    神器compass是肿么用这里不做介绍,因为我也不清楚,可参考官网:http://compass-style.org.这里主要介绍如何在内网安装compass. 首先介绍一般是如何安装compass的 ...

  4. 《Bandwidth-Aware Scheduling With SDN in Hadoop:A New Trend for Big Data》--2017

    Hadoop中使用SDN的带宽感知调度:大数据的一种新趋势 Abstract: 为了处理大规模的数据,提出了基于Hadoop框架的MapReduce,在Hadoop系统中,有一种叫做NP完全最小(NP ...

  5. 『编程题全队』Alpha 阶段冲刺博客Day6

    1.每日站立式会议 1.会议照片 2.昨天已完成的工作统计 孙志威: 1.添加JSON处理模块 2.添加了团队看板中的添加团队任务功能 3.添加了团队看板中的添加按钮 孙慧君: 1.个人任务框UI的设 ...

  6. composer 使用(踩坑笔记)

    composer的介绍 来张图就好啦!我不细说啦 安装composer 1).PHP 环境变量配置,可参考百度经验: 2).详情可参考中国全量镜像进行 Composer 的安装 3).安装完成后,命令 ...

  7. Graph Database & 图形数据库

    Graph Database 图形数据库 https://en.wikipedia.org/wiki/Graph_database cayley https://github.com/cayleygr ...

  8. EntityFramework 数据校验异常处理

    public void Insert(PageHost entity) { try { db.pagehost.Add(entity); db.SaveChanges(); } catch (DbEn ...

  9. 【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17290021 在http://blog.csdn.net/ns_code/article/ ...

  10. The Two Routes CodeForces - 601A(水最短路)

    一个完全图 1和n肯定有一条路  不是公路就是铁路  另= 另一个跑遍最短路即可 #include <bits/stdc++.h> #define mem(a, b) memset(a, ...