POJ 2240 【这题貌似可以直接FLOYD 屌丝用SPFA通过枚举找正权值环 顺便学了下map】
题意:
给了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】的更多相关文章
- poj 1789 每个字符串不同的字母数代表两个结点间的权值 (MST)
题目大意是就是给出n个长度为7的字符串,每个字符串代表一个车,定义车的距离是两个字符串间不同字母的个数,题目要求的数不同的车的距离的最小值,即所求的就是最小生成树 Sample Input 4aaaa ...
- 刷题总结——骑士的旅行(bzoj4336 树链剖分套权值线段树)
题目: Description 在一片古老的土地上,有一个繁荣的文明. 这片大地几乎被森林覆盖,有N座城坐落其中.巧合的是,这N座城由恰好N-1条双 向道路连接起来,使得任意两座城都是连通的.也就是说 ...
- 【贾志豪NOIP模拟题】慰问员工 cheer 【最小生成树】【对边权值的一些处理】
Description LongDD 变得非常懒, 他不想再继续维护供员工之间供通行的道路. 道路被用来连接 N(5 <= N <= 10,000)个房子, 房子被连续地编号为 1..N. ...
- poj 2240 Arbitrage (Floyd)
链接:poj 2240 题意:首先给出N中货币,然后给出了这N种货币之间的兑换的兑换率. 如 USDollar 0.5 BritishPound 表示 :1 USDollar兑换成0.5 Britis ...
- POJ 2240 - Arbitrage(bellman_ford & floyd)
题意: 给出一些货币和货币之间的兑换比率,问是否可以使某种货币经过一些列兑换之后,货币值增加. 举例说就是1美元经过一些兑换之后,超过1美元.可以输出Yes,否则输出No. 分析: 首先我们要把货币之 ...
- 最短路(Floyd_Warshall) POJ 2240 Arbitrage
题目传送门 /* 最短路:Floyd模板题 只要把+改为*就ok了,热闹后判断d[i][i]是否大于1 文件输入的ONLINE_JUDGE少写了个_,WA了N遍:) */ #include <c ...
- POJ 2240 Arbitrage(判正环)
http://poj.org/problem?id=2240 题意:货币兑换,判断最否是否能获利. 思路:又是货币兑换题,Belloman-ford和floyd算法都可以的. #include< ...
- poj 2240 Arbitrage 题解
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21300 Accepted: 9079 Descri ...
- POJ 2240 Arbitrage【Bellman_ford坑】
链接: http://poj.org/problem?id=2240 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
随机推荐
- C# 图片打印杂谈
日常开头水一下,看了下上次博客,一年零八天了,啧啧,奢侈. 最近这个工作挺满意的,是我想要的发展方向,后续要做机器学习,现在得先把公司之前堆积的问题解决了. 谈人生到此结束,还是说正题吧.(感觉这标题 ...
- codevs 6116 区间素数
时间限制: 8 s 空间限制: 256000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 小明喜欢研究素数,他想统计两个自然数之间的素数个数,现在 ...
- 51nod 1267 4个数和为0
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出&qu ...
- docker client和daemom
client 模式 docker命令对应的源文件是docker/docker.go, docker [options] command [arg...] 其中options参数为flag,任何时候执行 ...
- nvm、npm、nodejs的关系(转载)
nvm.npm.nodejs的关系 为什么要了解nvm.npm.nodejs的关系: reactNative的项目构建都是有这几个工具进行构建管理. 掌握他们的关系,就能了解reactNative项目 ...
- 暑假集训 || bitset
bitset是一个存储0和1的数组 可以快速的把两个bitset的每一位对应做与或啥的 在可以用01串表示某个状态的时候可以应用到它 就是有两个集合,求它们的交集 bitset <> a, ...
- 框架—Mybatis入门
1:Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的一个数据持久层的框架. MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果. ...
- pm2 start命令进阶详解
在node的世界里面,并不存在nginx或者apache,甚至tomcat这种东东.一个node,本身就用几行代码,就可以启动个server进程,监听个端口,为大家提供web服务.这和传统的网站代码的 ...
- C指针计算字符串长度
#include <stdio.h> int stringLength (const char *string) { const char *cptr = string; while ( ...
- MySQL数据库文件
MySQL数据库文件 本文档从MySQL数据库和存储引擎层面介绍各种类型的文件. 参数文件(my.cnf) 错误日志(error log) 二进制日志文件(binary log) 慢查询日志(slow ...