ACM/ICPC 之 SPFA-兑换货币(POJ1860)
//水题-SPFA解法
//套汇是指兑换货币后能使本金上升
//给定本金货币编号,货币间的汇率和手续费,求能否套汇成功
//Time:16Ms Memory:200K
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std; #define MAX 105 struct Edge {
int u, next;
double w, c;
Edge(){}
Edge(int u, double w, double c, int n):u(u), w(w), c(c), next(n){}
}e[2*MAX]; int n, m, st;
double my;
int h[MAX];
double d[MAX];
bool v[MAX]; bool spfa(int x)
{
memset(d, 0, sizeof(d));
memset(v, 0, sizeof(v));
queue<int> q;
q.push(x);
d[x] = my; v[x] = true;
while (!q.empty()){
int cur = q.front();
q.pop(); v[cur] = false;
for (int i = h[cur]; i != -1; i = e[i].next)
{
int u = e[i].u;
double w = e[i].w, c = e[i].c;
if ((d[cur] - c) * w > d[u]){
d[u] = (d[cur] - c) * w;
if (u == x) return true; //更新了源点,则套汇成功
if (!v[u]) {
v[u] = true; q.push(u);
}
}
}
}
return false;
} int main()
{
memset(h, -1, sizeof(h));
scanf("%d%d%d%lf", &n, &m, &st, &my);
for (int i = 0; i < m; i++)
{
int u, v;
double w, c;
scanf("%d%d%lf%lf", &u, &v, &w, &c);
e[2 * i] = Edge(v, w, c, h[u]); h[u] = 2 * i;
scanf("%lf%lf", &w, &c);
e[2 * i + 1] = Edge(u, w, c, h[v]); h[v] = 2 * i + 1;
}
if (spfa(st)) printf("YES\n");
else printf("NO\n"); return 0;
}
ACM/ICPC 之 SPFA-兑换货币(POJ1860)的更多相关文章
- ACM/ICPC 之 SPFA练习两道(ZOJ3088-ZOJ3103)
两道题都需要进行双向SPFA,比范例复杂,代码也较长,其中第二题应该可以用DFS或者BFS做,如果用DFS可能需要的剪枝较多. ZOJ3088-Easter Holydays //利用SPFA找出下降 ...
- ACM/ICPC 之 SPFA范例两道(POJ3268-POJ3259)
两道以SPFA算法求解的最短路问题,比较水,第二题需要掌握如何判断负权值回路. POJ3268-Silver Cow Party //计算正逆最短路径之和的最大值 //Time:32Ms Memory ...
- 2017 ACM/ICPC Asia Regional Shenyang Online spfa+最长路
transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/1 ...
- 2017 ACM/ICPC Shenyang Online SPFA+无向图最长路
transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/1 ...
- ACM - ICPC World Finals 2013 C Surely You Congest
原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 试题来源 ACM/ICPC World Fin ...
- HDU 5876 Sparse Graph 【补图最短路 BFS】(2016 ACM/ICPC Asia Regional Dalian Online)
Sparse Graph Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- hdu 5016 点分治(2014 ACM/ICPC Asia Regional Xi'an Online)
Mart Master II Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛
比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...
- ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))
祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...
随机推荐
- c语言strtod()函数的用法
函数原型: #include <stdlib.h> double strtod(const char *nptr, char **endptr); C语言及C++中的重要函数. 名称含义 ...
- Androidstudio的快捷键
只记忆常用的快捷键. 1,alt+enter导包,抛异常什么的,用来自动修正的 2,Ctrl+alt+V自动补全 3,Alt+Insert 生成代码(如get,set方法,构造函数等) 4,Ctrl+ ...
- [译]Mongoose指南 - Document
更新 有几种方式更新document. 先看一下传统的更新方法 Tank.findById(id, function(err, tank){ if(err) return handleError(er ...
- Linux中postfix邮件服务器的搭建
postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件.postfix是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试.在 ...
- linux下系统对于sigsegv错误时的处理
一般来讲,对非法地址的访问会导致应用程序收到由系统发送的sigsegv信号,默认情况下,函数对于这个信号的处理是退出. 但是为了方便调试,我们可以自己设置处理函数,使用signal函数. 这里比较重要 ...
- JS跳转后台
location.href = ROOT+"?"+VAR_MODULE+"=FaPiao&"+VAR_ACTION+"=dell&id ...
- maven 向本地私库导入jar
mvn install:install-file -DgroupId=<your_group_name> -DartifactId=<your_artifact_name> - ...
- VPN和SSH的原理区别
原文:http://www.hostloc.com/thread-153223-1-1.html 看了http://www.hostloc.com/thread-153166-1-1.html 主要说 ...
- Bus Hound 的使用方法
背景: 最近在研究USB相关协议,需要对USB数据进行抓取分析,Bus Hound是个非常赞的工具,在此将其使用方法记录下来,以备下次快速上手使用. 正文: 主界面如下: 首先关注菜单栏三个选项: C ...
- 第11天 Stack Queue
1.Stack package algs4; import java.util.Iterator; import java.util.NoSuchElementException; public cl ...