题意:

给了n种硬币的名称,给了m种硬币间的转换关系。

从任意兑换地点开始兑换,看是否能够通过兑换的方式增加金钱。

思路:

用SPFA不断对各个点进行松弛操作,寻找正权值的环。如果找到则输出Yes。

这题测试的时候竟然发现dis数组写成int型...

#include<stdio.h>
#include<map>
#include<string.h>
#include<string>
#include<iostream>
#include<queue>
using namespace std;
int n,m;
int ednum;
bool ok;
bool vis[];
int cnt[];
double dis[];
map<string,int>mymap;
struct edge
{
int id;
double plu;
edge *next;
};
edge edges[];
edge *adj[];
inline void addEdge(int a,int b,double c)
{
edge *tmp;
tmp=&edges[ednum];
ednum++;
tmp->id=b;
tmp->plu=c;
tmp->next=adj[a];
adj[a]=tmp;
}
bool SPFA(int pos)
{
int id;
memset(cnt,,sizeof(cnt));
for(int i=;i<=n;i++)
{
dis[i]=-;
}
memset(vis,,sizeof(vis));
dis[pos]=;
queue<int>q;
q.push(pos);
vis[pos]=;
cnt[pos]++;
while(!q.empty())
{
id=q.front();
q.pop();
vis[id]=;
for(edge *p=adj[id];p;p=p->next)
{
if(dis[id]*p->plu>dis[p->id])
{
cnt[p->id]++;
if(cnt[p->id]>n)
return ;
dis[p->id]=dis[id]*p->plu;
if(!vis[p->id])
{
vis[p->id]=;
q.push(p->id);
}
}
}
}
return ;
}
int main()
{
string tmp,tmpa,tmpb;
double num;
int cas=;
cin>>n;
while(n)
{
cas++;
ok=;
ednum=;
for(int i=;i<=n;i++)
{
adj[i]=NULL;
}
mymap.clear();
for(int i=;i<=n;i++)
{
cin>>tmp;
mymap.insert(make_pair(tmp,i));
}
cin>>m;
for(int i=;i<=m;i++)
{
cin>>tmpa>>num>>tmpb;
addEdge(mymap[tmpa],mymap[tmpb],num);
}
for(int i=;i<=n;i++)
{
if(SPFA(i))
{
ok=;
break;
}
}
printf("Case %d: ",cas);
if(ok)
printf("Yes\n");
else
printf("No\n");
cin>>n;
}
}

POJ 2240 【这题貌似可以直接FLOYD 屌丝用SPFA通过枚举找正权值环 顺便学了下map】的更多相关文章

  1. poj 1789 每个字符串不同的字母数代表两个结点间的权值 (MST)

    题目大意是就是给出n个长度为7的字符串,每个字符串代表一个车,定义车的距离是两个字符串间不同字母的个数,题目要求的数不同的车的距离的最小值,即所求的就是最小生成树 Sample Input 4aaaa ...

  2. 刷题总结——骑士的旅行(bzoj4336 树链剖分套权值线段树)

    题目: Description 在一片古老的土地上,有一个繁荣的文明. 这片大地几乎被森林覆盖,有N座城坐落其中.巧合的是,这N座城由恰好N-1条双 向道路连接起来,使得任意两座城都是连通的.也就是说 ...

  3. 【贾志豪NOIP模拟题】慰问员工 cheer 【最小生成树】【对边权值的一些处理】

    Description LongDD 变得非常懒, 他不想再继续维护供员工之间供通行的道路. 道路被用来连接 N(5 <= N <= 10,000)个房子, 房子被连续地编号为 1..N. ...

  4. poj 2240 Arbitrage (Floyd)

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

  5. POJ 2240 - Arbitrage(bellman_ford & floyd)

    题意: 给出一些货币和货币之间的兑换比率,问是否可以使某种货币经过一些列兑换之后,货币值增加. 举例说就是1美元经过一些兑换之后,超过1美元.可以输出Yes,否则输出No. 分析: 首先我们要把货币之 ...

  6. 最短路(Floyd_Warshall) POJ 2240 Arbitrage

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

  7. POJ 2240 Arbitrage(判正环)

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

  8. poj 2240 Arbitrage 题解

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

  9. POJ 2240 Arbitrage【Bellman_ford坑】

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

随机推荐

  1. IOS状态栏

    IOS状态栏是什么地方? 它是IOS设备屏幕顶部显示信号以及电池的区域.状态栏默认的高度是20像素,状态栏在软件开发中有何作用?联网应用中可在自动帮用户下载数据时使用,推荐在状态栏中予以显示.状态栏可 ...

  2. 【HEVC简介】High Level Syntax

    参考文献:见<High Efficiency Video Coding (HEVC)>High Level Syntax章节 <HEVC标准介绍.HEVC帧间预测论文笔记>系列 ...

  3. js递归和数组去重(简单便捷的用法)

    1.递归例子<script type="text/javascript"> function test(num) { if(num < 0) { return; ...

  4. cnbeta新闻资讯第三方客户端应用

    该源码案例是一个cnbeta第三方客户端应用案例,作者ywwxhz,源码cnBeta-reader,cnbeta 的 Android 客户端项目. 源码下载: http://code.662p.com ...

  5. dropdb - 删除一个现有 PostgreSQL 数据库

    SYNOPSIS dropdb [ option...] dbname DESCRIPTION 描述 dropdb 删除一个现有 PostgreSQL 数据库. 执行这条命令的人必须是数据库超级用户, ...

  6. PRJ0003 : Error spawning 'midl.exe'

    原因:出现该错误的是由于:C:\Program Files\Microsoft SDKs\Windows\v6.0A midl.exe 和midlc.exe缺失. 解决方法:从别人电脑上拷贝这个两个文 ...

  7. 微信小程序---协同工作和发布

    (1)协同开发和发布 在中大型的公司里,人员的分工非常仔细,一般会有不同岗位角色的员工同时参与同一个小程序项目.为此,小程序平台设计了不同的权限管理使得项目管理者可以更加高效管理整个团队的协同工作. ...

  8. 字符串类型:str, bytes 的区别

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分. 文本总是 Unicode,由 str 类型表示, 二进制数据则由 bytes 类型表示. Python 3不会以任意隐式的方 ...

  9. JavaSE-25 AWT

    学习要点 关于AWT AWT容器 布局管理器 AWT组件 事件处理 关于AWT java.awt包与子包 AWT软件包 说明 import  java.awt.*; 基本组件使用工具 import  ...

  10. 在已有的mysql表中添加自增字段

    现有数据表xiami,建表的时候忘记添加自增字段,现需要添加自增字段 第一步:添加字段 alter table xiami add id int; 第二步:修改字段 alter tabel xiami ...