POJ 1860 Currency Exchange (SPFA松弛)
2016-03-19 13:36
363 查看
题目链接:http://poj.org/problem?id=1860
题意是给你n种货币,下面m种交换的方式,拥有第s种货币V元。问你最后经过任意转换可不可能有升值。下面给你货币u和货币v,r1是u到v的汇率,c1是u到v的手续费,同理r2是v到u的汇率,c2是v到u的手续费。转换后的钱B = (转换之前的钱A - c) * r。
我用spfa做的,不断地松弛。要是存在正环,或者中间过程最初的钱升值了,就说明会升值。有负环的话,不满足松弛的条件,慢慢地就会弹出队列,也就不会升值。
题意是给你n种货币,下面m种交换的方式,拥有第s种货币V元。问你最后经过任意转换可不可能有升值。下面给你货币u和货币v,r1是u到v的汇率,c1是u到v的手续费,同理r2是v到u的汇率,c2是v到u的手续费。转换后的钱B = (转换之前的钱A - c) * r。
我用spfa做的,不断地松弛。要是存在正环,或者中间过程最初的钱升值了,就说明会升值。有负环的话,不满足松弛的条件,慢慢地就会弹出队列,也就不会升值。
#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; const int MAXN = 1005; struct data { int next , to; double r , c; }edge[MAXN * 3]; int head[MAXN] , cont; double d[MAXN]; void init(int n) { for(int i = 0 ; i <= n ; i++) { head[i] = -1; d[i] = 0; } cont = 0; } inline void add(int u , int v , double r , double c) { edge[cont].next = head[u]; edge[cont].to = v; edge[cont].r = r; edge[cont].c = c; head[u] = cont++; } bool spfa(int s , double V) { queue <int> que; while(!que.empty()) { que.pop(); } que.push(s); d[s] = V; while(!que.empty()) { int temp = que.front(); que.pop(); for(int i = head[temp] ; ~i ; i = edge[i].next) { double x = edge[i].r * (d[temp] - edge[i].c); if(x > d[edge[i].to]) { //松弛 d[edge[i].to] = x; que.push(edge[i].to); if(d[s] > V) //增加则直接返回true return true; } } } return false; } int main() { int n , m , s , u , v; double V , r , c; while(~scanf("%d %d %d %lf" , &n , &m , &s , &V)) { init(n); for(int i = 0 ; i < m ; i++) { scanf("%d %d %lf %lf" , &u , &v , &r , &c); add(u , v , r , c); scanf("%lf %lf" , &r , &c); add(v , u , r , c); } if(spfa(s , V)) printf("YES\n"); else printf("NO\n"); } }
相关文章推荐
- CodeForces 596A
- JS的魅力
- 【转】Fiddler的基本介绍
- TFS 10周年生日快乐 – TFS与布莱恩大叔的故事
- java.util.Stack类中的peek()方法
- 四则运算终结版
- codeforces 655C C. Enduring Exodus(二分)
- 给button添加点击事件,打开一个新的窗体
- make警告:检测到时钟错误
- Delphi常见图象格式转换技术
- java编程思想-字符串
- IOS CALayer(一)
- 计算机网络_面试
- MySQL 新增库同步到Slave
- 【java算法】约瑟夫问题求解
- Win10无法上网提示缺少一个或者多个网络协议的处理方法
- java正则表达式语法
- 【matlab】:matlab中 RGB到YUV的转变
- win7中安装jdk/mysql/odbc
- 搭建Cordova + Ionic + WebStorm环境开发Web App应用