POJ 2240 http://poj.org/problem?id=2240

题意:判断是否存在使得汇率增多的环

【任意一个点的汇率增多都可以】

Floyd 简单变形

\(w[i][j] = max(w[i][j], w[i][k]*w[k][j])\)

#ifndef ONLINE_JUDGE
#pragma warning(disalbe : 4996)
#endif
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<map>
#include<cstring>
using namespace std;
const int maxn = 40;
double d[maxn];
int n, m; double w[maxn][maxn];
map<string, int>mp; void floyd() {
for (int k = 1; k <= n; ++k)
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
w[i][j] = max(w[i][j], w[i][k] * w[k][j]);
} int main() {
ios::sync_with_stdio(false);
cin.tie(0);
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif // !ONLINE_JUDGE
int kcase = 0;
while (cin >> n && n) {
mp.clear(); string s;
for (int i = 1; i <= n; ++i) {
cin >> s;
mp[s] = i;
w[i][i] = 1;//自己换自己
} cin >> m;
string s1, s2;
double rat;
for (int i = 0; i < m; ++i) {
cin >> s1 >> rat >> s2;
w[mp[s1]][mp[s2]] = rat;
} floyd(); bool flag = 0;
for (int i = 1; i <= n; ++i)
if (w[i][i] > 1.0) { flag = 1; break; } printf("Case %d: ", ++kcase);
if (flag) printf("Yes\n");
else printf("No\n");
}
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
system("out.txt");
#endif // !ONLINE_JUDGE
return 0;
}

bellman_ford 判断正环

#ifndef ONLINE_JUDGE
#pragma warning(disalbe : 4996)
#endif
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<map>
#include<cstring>
using namespace std;
const int maxn = 40;
double d[maxn];
int n, m; struct Edge {
int u, v;
double r;
}edge[maxn * maxn];
map<string, int>mp; bool bellman_ford(int s) {
memset(d, 0, sizeof(d));
d[s] = 1;
for(int i = 1;i <=n; ++i)
for (int j = 0; j < m; ++j) {
int u = edge[j].u;
int v = edge[j].v;
double r = edge[j].r;
if (d[v] < d[u] * r)
d[v] = d[u] * r;
}
if (d[s] > 1.0)return true;
return false;
} int main() {
ios::sync_with_stdio(false);
cin.tie(0);
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif // !ONLINE_JUDGE
int kcase = 0;
while (cin >> n && n) {
mp.clear(); string s;
for (int i = 1; i <= n; ++i) {
cin >> s;
mp[s] = i;
} cin >> m;
string s1, s2;
double rat;
for (int i = 0; i < m; ++i) {
cin >> s1 >> rat >> s2;
edge[i].u = mp[s1];
edge[i].v = mp[s2];
edge[i].r = rat;
} bool flag = false;
for(int i = 1;i <=n; ++i)
if (bellman_ford(i)) {
flag = true;
break;
} printf("Case %d: ", ++kcase);
if (flag) printf("Yes\n");
else printf("No\n");
}
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
system("out.txt");
#endif // !ONLINE_JUDGE
return 0;
}

POJ:Arbitrage (搜索,汇率换算是否赚?)的更多相关文章

  1. [java] 更好的书写equals方法-汇率换算器的实现(4)

    [java] 更好的书写equals方法-汇率换算器的实现(4) // */ // ]]>   [java] 更好的书写equals方法-汇率换算器的实现(4) Table of Content ...

  2. [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3

    [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 // */ // ]]>   [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 Table of C ...

  3. [java] jsoup使用简介-汇率换算器实现-插曲2

    [java] jsoup使用简介-汇率换算器实现-插曲2 // */ // ]]>   [java] jsoup使用简介-汇率换算器实现-插曲2 Table of Contents 1 系列文章 ...

  4. [java] 汇率换算器实现(3)

    [java] 汇率换算器实现(3) // */ // ]]>   [java] 汇率换算器实现(3) Table of Contents 1 系列文章地址 2 前言 3 提取简单表单信息 3.1 ...

  5. [java] 汇率换算器实现-插曲1-正则表达式(1)

    [java] 汇率换算器实现-插曲1-正则表达式(1) // */ // ]]> // */ // ]]>   [java] 汇率换算器实现-插曲1-正则表达式(1) Table of C ...

  6. [java] 汇率换算器实现(2)

    [java] 汇率换算器实现(2) // */ // ]]> // */ // ]]>   [java] 汇率换算器实现(2) Table of Contents 1 系列文章地址 2 前 ...

  7. [java] 汇率换算器实现(1)

    [java] 汇率换算器实现(1) // */ // ]]>   [java] 汇率换算器实现(1) Table of Contents 1 问题描述 2 类设计 3 初步实现 3.1 建立项目 ...

  8. 【菜鸟学Python】案例一:汇率换算

    汇率换算V1.0 案例描述: 设计一个汇率换算器程序,其功能是将外币换算成人民币,或者相反 案例分析: 分析问题:分析问题的计算部分: 确定问题:将问题划分为输入.处理及输出部分: 设计算法:计算部分 ...

  9. 汇率换算自然语言理解功能JAVA DEMO

    >>>>>>>>>>>>>>>>>>>>>>>> 欢迎转 ...

  10. catch that cow POJ 3278 搜索

    catch that cow POJ 3278 搜索 题意 原题链接 john想要抓到那只牛,John和牛的位置在数轴上表示为n和k,john有三种移动方式:1. 向前移动一个单位,2. 向后移动一个 ...

随机推荐

  1. webpack 从 v4 升级到 v5

    准备工作 Node.js 至少升级到 v10.13.x 以上. 其它 修改 webpack.config.js 配置,以及部分老的 webpack 插件要更新. 参考 中文版 从 v4 升级到 v5 ...

  2. weblogic端口号和内存怎么修改?

    在WebLogic中修改端口号和内存分配是一项重要的任务,它涉及到服务器性能和应用程序的可靠性.下面我将详细介绍如何修改WebLogic的端口号和内存设置. 修改端口号 WebLogic使用多个端口来 ...

  3. 这下对阿里java这几条规范有更深理解了

    背景 阿里java开发规范是阿里巴巴总结多年来的最佳编程实践,其中每一条规范都经过仔细打磨或踩坑而来,目的是为社区提供一份最佳编程规范,提升代码质量,减少bug. 这基本也是java业界都认可的开发规 ...

  4. C# 常量 结构体 委托

    常量 const double PI = 3.1415926; 常量名命名一般使用大写字母 枚举类型 开发一个游戏,游戏角色有法师(Mage).射手(Archer).刺客(Assassin).坦克(T ...

  5. 算法与数据结构——kpm算法

  6. C++ Qt开发:ToolBar与MenuBar菜单组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ToolBar ...

  7. C++ Qt开发:标准Dialog对话框组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍标准对话框QI ...

  8. PTA数组及排序查找题解与解题思路

    PTA数组及排序查找题解与解题思路 函数题目 函数题目为平台提供的裁判程序调用所完成的函数进行判题,题目规定语言为C语言 6-1 求出二维数组的最大元素及其所在的坐标 本题较为简单,考察的是如何遍历一 ...

  9. bash shell笔记整理——ls命令

    语法: ls [选项] [文件 或 目录] 选项 使用说明 –a 显示指定目录下的所有文件,包括隐藏文件. -A 显示除了.和..的外的所有文件. -l 显示详细的文件信息. -d 如果是目录,只显示 ...

  10. rcs群发软件系统功能设计与应用,rcs群发软件系统,rcs群发软件

    随着科技的不断发展,人们对于通讯方式的需求也在不断变化,传统的短信.电话已经无法满足人们对于高效.便捷.实时的通讯需求,正是在这样的背景下,富通讯解决方案(Rich Communication Sui ...