题意:

有n种钱币,m个钱币兑换点,小明一开始有第n种钱币数量为w。

每个兑换点可以将两种不同的钱币相互兑换,但是兑换前要先收取一定的费用,然后按照比例兑换。

问小明是否可以经过一系列的兑换之后能够将持有的第n种钱的数量增加。

这题大概就是看是否存在权值为正的环。如果存在这样的环,那么可以一直循环,然后在适当的时候兑换成第n种钱币。

这种算法一定要看好兑换率的范围!~

思路:

利用SPFA算法,当一个点松弛次数超过N次的时候我们认为存在一个正环。

#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int n,m,stc;
int ednum;
int cnt[];
double stnum;
double dis[];
bool vis[];
struct edge
{
int id;
double cost,plu;
edge *next;
};
edge edges[];
edge *adj[];
inline void addEdge(int a,int b,double c,double d)
{
edge *tmp;
tmp=&edges[ednum];
ednum++;
tmp->id=b;
tmp->cost=c;
tmp->plu=d;
tmp->next=adj[a];
adj[a]=tmp;
}
bool SPFA()
{
int id;
memset(cnt,,sizeof(cnt));
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++)
{
dis[i]=-;
}
dis[stc]=stnum;
queue<int>q;
q.push(stc);
vis[stc]=;
cnt[stc]++;
while(!q.empty())
{
id=q.front();
q.pop();
vis[id]=;
for(edge *p=adj[id];p;p=p->next)
{
if((dis[id]-p->cost>)&&((dis[id]-p->cost)*p->plu>dis[p->id]))
{
cnt[p->id]++;
if(cnt[p->id]>n)//如果松弛次数超过n次,则说明存在正环
return ;
dis[p->id]=(dis[id]-p->cost)*p->plu;
if(!vis[p->id])
{
q.push(p->id);
vis[p->id]=;
}
}
}
}
return ;
}
int main()
{
int a,b;
double c,d,e,f;
scanf("%d%d%d%lf",&n,&m,&stc,&stnum);
for(int i=;i<=m;i++)
{
scanf("%d%d%lf%lf%lf%lf",&a,&b,&d,&c,&f,&e);
addEdge(a,b,c,d);
addEdge(b,a,e,f);
}
if(SPFA())
printf("YES\n");
else
printf("NO\n");
return ;
}

POJ 1860【求解是否存在权值为正的环 屌丝做的第一道权值需要计算的题 想喊一声SPFA万岁】的更多相关文章

  1. poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)

    链接:poj 1860 题意:给定n中货币.以及它们之间的税率.A货币转化为B货币的公式为 B=(V-Cab)*Rab,当中V为A的货币量, 求货币S通过若干此转换,再转换为原本的货币时是否会添加 分 ...

  2. POJ 1860——Currency Exchange——————【最短路、SPFA判正环】

    Currency Exchange Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u S ...

  3. 最短路(Bellman_Ford) POJ 1860 Currency Exchange

    题目传送门 /* 最短路(Bellman_Ford):求负环的思路,但是反过来用,即找正环 详细解释:http://blog.csdn.net/lyy289065406/article/details ...

  4. POJ 1860 Currency Exchange (最短路)

    Currency Exchange Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u S ...

  5. POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环)

    POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环) Description Several currency ...

  6. poj - 1860 Currency Exchange Bellman-Ford 判断正环

    Currency Exchange POJ - 1860 题意: 有许多货币兑换点,每个兑换点仅支持两种货币的兑换,兑换有相应的汇率和手续费.你有s这个货币 V 个,问是否能通过合理地兑换货币,使得你 ...

  7. POJ 1860 Currency Exchange (Bellman-Ford)

    题目链接:POJ 1860 Description Several currency exchange points are working in our city. Let us suppose t ...

  8. 如何通过源生js获取一个元素的具体样式值 /* getCss:获取指定元素的具体样式的属性值 curElement:[dom对象] attr:[string] */

    昨天的博客些的真的是惨不忍睹啊!!!但是我的人生宗旨就是将不要脸的精神进行到底,所以,今天我又来了.哈哈哈哈哈! 方法一:元素.style.属性名:(这个有局限性--只能获取行内样式的值,对于样式表或 ...

  9. 关于有默认值的字段在用EF做插入操作时的思考(续)

    问题描述 今天下午(看现在这时间,应该是昨天下午了哈),园友 choon 写了这样一篇博文<关于有默认值的字段在用EF做插入操作时的思考>. 博文内容主要记录的是 choon 使用 EF ...

随机推荐

  1. toast插件的简单封装(样式适用pc后台管理系统的场景)

    直接分三个步骤吧: 1.手写一个toast.vue组件 <template> <transition name="toast-fade"> <div ...

  2. vue路由高级语法糖

    1.当 <router-link> 对应的路由匹配成功,将自动设置 class 属性值 .router-link-active. 模板中可以用{{$route.params.xxx取到路由 ...

  3. Elasticsearch学习(二)————搜索

    Elasticsearch1.query string search1.1.搜索全部// 1. GET http://ip:9200/test/test/_search 结果: { "too ...

  4. 使用docker搭建gitlab 服务器

    本次使用的docker版本为 1.首先需要安装docker. 2.启动docker后,service docker start   3.拉取镜像  docker pull gitlab/gitlab- ...

  5. promise 里面的 console.info 打印信息 并不准确,后期有修改对象数据,会覆盖,影响之前的显示

    promise 里面的 console.info 打印信息 并不准确,后期有修改对象数据,会覆盖,影响之前的显示

  6. 事物的四大特性(acid)

    如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一 ...

  7. 【干货分享】C# 实体类生成工具

    前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...

  8. HLS协议详解

    1. HLS HLS是为移动设备开发的基于HTTP的流媒体解决方案. 2. 原理: 将视频或流切分成小片(TS), 并建立索引(M3U8). 支持视频流:H.264: 音频流:AAC 3. M3U8文 ...

  9. c# xml本地化用法

    1.普通格式 2.占位符格式 注意事项: 1.Pascal命名法 2.key只是key,中间不需要空格,value可以空格 3.占位符左右两边分别空一格

  10. Mysql when case 批量更新

    UPDATE categories SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END WHERE id ...