hdu 1217 Arbitrage (spfa算法)
2024-08-20 15:19:38
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217
题目大意:通过货币的转换,来判断是否获利,如果获利则输出Yes,否则输出No。
这里介绍一个STL中的map容器去处理数据,map<string,int>V,M;
现在我目前的理解是将字符串转换成数字,然后就是根据spfa的模板找最短路了。。哇哈哈( ⊙o⊙ )哇
#include <iostream>
#include <cstdio>
#include <map>
#include <queue>
#include <cstring>
using namespace std;
int n,a;
double Map[][];
const int INF=;
map<string,int>V; int spfa()
{
queue<int>q;
double node[]= {};
int inq[]= {};
node[]=;
inq[]=;
q.push();
while (!q.empty())
{
int s=q.front();
q.pop();
for (int i=; i<=n; i++)
{
//cout<<Map[s][i]<<" "<<node[i]<<endl;
if (node[i]<Map[s][i]*node[s])
{
//cout<<node[i]<<" "<<Map[s][i]<<endl;
node[i]=Map[s][i]*node[s];
if (!inq[i])
{
q.push(i);
inq[i]=;
}
if (node[]>)
return ;
} }
inq[s]=;
}
return ;
}
int main ()
{
char ch[];
int cmp=,q;
while (scanf("%d",&n),n)
{
q=;
V.clear();
for (int i=; i<=n; i++)
for (int j=; j<=n; j++)
Map[i][j]=;
//memset(Map,INF,sizeof(Map));
for (int i=; i<=n; i++)
{
scanf("%s",ch);
if (!V[ch])
V[ch]=++q;
}
scanf("%d",&a);
for (int i=; i<=a; i++)
{
double money;
char ch1[],ch2[];
scanf("%s%lf%s",ch1,&money,ch2);
if (Map[V[ch1]][V[ch2]]<money)
Map[V[ch1]][V[ch2]]=money;
//cout<<Map[V[ch1]][V[ch2]]<<endl;
}
printf ("Case %d: ",cmp++);
if (spfa())
printf("Yes\n");
else
printf ("No\n");
}
return ;
}
最新文章
- 勇者斗恶龙UVa11292 - Dragon of Loowater
- poj 3734 Blocks
- [Android分享] 【转帖】Android ListView的A-Z字母排序和过滤搜索功能
- G-nav-01
- 【BZOJ】1043: [HAOI2008]下落的圆盘(计算几何基础+贪心)
- Bluetooth L2CAP介绍
- 详解Oracle创建用户权限全过程
- Debian 7 安装 Emacs 24.4
- 基于C#的SolidWorks插件开发(1)--SolidWorks API接口介绍
- SecureCRT 安装及初始化配置
- C语言预处理指令的初步了解
- android 巧用资源文件(不断积累)
- Linux Apache2 配置介绍
- Idea实用快捷键
- [UnityShader基础]05.模板测试
- Java 中单引号和双引号的区别
- C# EditPlus环境设置
- tomcat自动缓存的几种解决方式
- Android 开发工具类 06_NetUtils
- crontab定时执行