博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1217(spfa,存在环,但需要将环的元素历遍一次.....求乘积的最大)
阅读量:6755 次
发布时间:2019-06-26

本文共 991 字,大约阅读时间需要 3 分钟。

题意:有n个国家货币,给出m种两个国家之间的货币兑换率,求是否可以盈利.......

思路:其实就是看国家货币兑换间是否存在一个环,使得从v点出发时,dis[v]=1,经过环回到v点时,dis[v]>1.......当然,路径是单向的。这个题目的松弛是:dis[i]<dis[v]*map[v][i],只单单spfa来说,要判断存在一个正环,那么就是某个点被历遍>=n+1次,从而判断这个环不存在“最大路”.....但是,就这题目而已,我们不需要判断最大路是否存在,我们只需要判断,是否可以盈利。可以盈利的话,那么从某个点p出发,经过一个环,回到点p,通过松弛,dis[p]>1,说明可以盈利,否则就是不能。那么可以使用数组进行标记,每次一个点可以松弛(就是满足dis[i]<dis[v]*map[v][i]),那么先更新这个点的最大值,然后判断这个点是否在队列里面,在的话,就不需要压入队列,否则压入队列......一个点出队列的时候,它相应的标记数要清零.......

#include
#include
#include
#include
#include
using namespace std;struct node{ int e; double d;};char t[50][100],s[1000][100],s1[1000][100],vist[1000];int n,m,flg;double dis[100],x[1000];vector
vet[1000];void spfa(int v){ for(int i=0;i<=n;i++) dis[i]=0; dis[v]=1.0; queue
q; q.push(v); vist[v]=1; while(!q.empty()) { int u=q.front(); q.pop(); vist[u]=0; for(int i=0;i
1.0) { flg=1; return; } } } }}int main(){ int text=0; while(scanf("%d",&n)>0&&n) { for(int i=0;i

 

转载地址:http://mqgho.baihongyu.com/

你可能感兴趣的文章
Windows Mysql Server重启, log-bin路径配置
查看>>
刘剑锋:友云采助力企业数字化采购的新发展
查看>>
Rainbond 5.0.4 发布,做最好用的云应用操作系统
查看>>
亚马逊宣布与西云数据达成合作,旨在进一步扩大中国业务
查看>>
java nio的基础--缓冲区
查看>>
负载均衡沙龙活动第二期现场问答汇集
查看>>
GBDT原理及利用GBDT构造新的特征-Python实现
查看>>
Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(10)...
查看>>
【Xamarin.Forms】在XAML中传递参数
查看>>
关于数据仓库 — 总体工具介绍
查看>>
最大的错误是不敢犯错
查看>>
跟我学交换机配置(七)
查看>>
makefile 中 $@ $^ % 2015-04-11 18:02:36
查看>>
C#强化系列文章三:实验分析C#中三种计时器使用异同点
查看>>
Linux 进程间通信(一)
查看>>
通用对象池ObjectPool的一种简易设计和实现方案
查看>>
HTTP压缩仍让加密连接处于风险之中
查看>>
乐视阿里达成百亿元销售框架
查看>>
戴尔通过提升大数据分析能力巩固“全数据”战略 帮助企业在现代数据经济中蓬勃发展...
查看>>
⑤Windows Server 8 RemoteFX体验
查看>>