题意:

给了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. CSData

    NSString 转换成NSData 对象 NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncodin ...

  2. JAVA之NIO按行读取大文件

    做项目过程中遇到要解析100多M的TXT文件,并入库.用之前的FileInputStream.BufferedReader显然不行了,虽然readLine这方法可以直接按行读取,但是去读一个140M左 ...

  3. JQuery 获得绝对,相对位置的坐标方法

    获取页面某一元素的绝对X,Y坐标,可以用offset()方法:(body属性设置margin :0;padding:0;) var X = $('#DivID').offset().top; var ...

  4. how to use Hexo

    Hexo is a good tool to build a personal blog.Here are some good reference:1: https://hexo.io/zh-cn/d ...

  5. MFC模态框关闭时出现断言报错!

    我尝试一个老的主对话框上创建另一个新的模态对话框并结束对话框,然后包含创建模态对话框的函数体执行结束时,我出现了这个断言失败! 原因:使用PostQuitMessage(1),导致出现上述问题:或者别 ...

  6. zabbix auto registration

    1./etc/zabbix/zabbix_agent.conf serverActive=zabbix server ip 2.frontend configuration>actions> ...

  7. Java垃圾回收之老年代垃圾收集器

    1.Serial Old 收集器(-XX: +UseSerialOldGC, 标记-整理算法) 1.1 单线程收集,进行垃圾收集时,必须暂停所有工作线程 1.2 简单高效,Client模式下默认的老年 ...

  8. 哈理工(HUST)第八届程序设计竞赛--小乐乐的组合数

    这道题目是一道数学题,我们可以假设n为7,m为14. 这样的话我们就可以很清晰地看到7和7可以拼接在一起,这是一对,然后是7和14拼接在一起,第二对. 我们可以直接让n/7,m/7,这样就是1*2,就 ...

  9. (2) OpenSSL命令

    openssl命令的格式是"openssl command command-options args",command部分有很多种命令,这些命令需要依赖于openssl命令才能执行 ...

  10. Linux基础学习-命令行与图形界面切换

    命令行模式和图形界面模式切换 打开文件 vim /etc/inittab # systemd uses 'targets' instead of runlevels. By default, ther ...