POJ 1860 Currency Exchange (SPFA松弛)

题目链接: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做的,不断地松弛。要是存在正环,或者中间过程最初的钱升值了,就说明会升值。有负环的话,不满足松弛的条件,慢慢地就会弹出队列,也就不会升值。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <queue>
 5 using namespace std;
 6 const int MAXN = 1005;
 7 struct data {
 8     int next , to;
 9     double r , c;
10 }edge[MAXN * 3];
11 int head[MAXN] , cont;
12 double d[MAXN];
13 
14 void init(int n) {
15     for(int i = 0 ; i <= n ; i++) {
16         head[i] = -1;
17         d[i] = 0;
18     }
19     cont = 0;
20 }
21 
22 inline void add(int u , int v , double r , double c) {
23     edge[cont].next = head[u];
24     edge[cont].to = v;
25     edge[cont].r = r;
26     edge[cont].c = c;
27     head[u] = cont++;
28 }
29 
30 bool spfa(int s , double V) {
31     queue <int> que;
32     while(!que.empty()) {
33         que.pop();
34     }
35     que.push(s);
36     d[s] = V;
37     while(!que.empty()) {
38         int temp = que.front();
39         que.pop();
40         for(int i = head[temp] ; ~i ; i = edge[i].next) {
41             double x = edge[i].r * (d[temp] - edge[i].c);
42             if(x > d[edge[i].to]) {  //松弛
43                 d[edge[i].to] = x;
44                 que.push(edge[i].to);
45                 if(d[s] > V) //增加则直接返回true
46                     return true;
47             }
48         }
49     }
50     return false;
51 }
52 
53 int main()
54 {
55     int n , m , s , u , v;
56     double V , r , c;
57     while(~scanf("%d %d %d %lf" , &n , &m , &s , &V)) {
58         init(n);
59         for(int i = 0 ; i < m ; i++) {
60             scanf("%d %d %lf %lf" , &u , &v , &r , &c);
61             add(u , v , r , c);
62             scanf("%lf %lf" , &r , &c);
63             add(v , u , r , c);
64         }
65         if(spfa(s , V))
66             printf("YES\n");
67         else
68             printf("NO\n");
69     }
70 }

 

转载于:https://www.cnblogs.com/Recoder/p/5294974.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fluent瞬态计算自动保存中cas和data文件全都保存还是只保存data

每一个输出结果同时保存cas文件和data文件 模型树-solution-Caculation activities-Autosave Every-Each time 效果如图&#xff1a; 每一个输出结果只保存data文件不保存cas文件&#xff0c;只有在修改计算设置后自动保存cas文件 模型树-solution-Caculation activities-Onl…

VirtualBox更改默认路径

我这几天想把所有的文件夹都改成英文的&#xff0c;避免运行一些软件的时候因为中文路径发生不必要的错误&#xff0c;怎么移动虚拟机呢&#xff1f;直接修改名字会出错的&#xff0c;网上很多方法什么改注册表&#xff0c;什么运行一大串命令&#xff0c;真的很麻烦&#xff0…

Tecplot如何导入多个DAT文件后激活solution time按钮

先导入CAS&#xff0c;后导入多个DAT文件——错误方式&#xff0c;激活不了。 正确方式&#xff1a;CAS文件和DAT文件同时导入&#xff1a; 此时已激活solution按钮

python修改mp3信息_Python修改MP3文件的方法

本文实例讲述了Python修改MP3文件的方法。分享给大家供大家参考。具体如下&#xff1a;用这个程序修改后的MP3比原来要小一些了&#xff0c;因为一张图片被删除了&#xff0c;起到了给MP3"瘦身"的作用。在一些mp3中&#xff0c;每个都有一张400多K的图片&#xff0c;…

蓝桥杯 无穷分数

无穷分数无穷的分数&#xff0c;有时会趋向于固定的数字。请计算【图1.jpg】所示的无穷分数&#xff0c;要求四舍五入&#xff0c;精确到小数点后5位&#xff0c;小数位不足的补0。请填写该浮点数&#xff0c;不能填写任何多余的内容。<span style"font-size:14px;&quo…

Tecplot如何提取某点数据并导出

Tecplot2018 选中曲线&#xff0c;右键&#xff0c;导出到文件&#xff0c;文件用记事本打开&#xff0c;复制到excel或者origin处理

shell 进入hadoop_Hadoop Shell命令

调用文件系统(FS)Shell命令应使用bin/hadoop fs 的形式。所有的的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path。对HDFS文件系统&#xff0c;scheme是hdfs&#xff0c;对本地文件系统&#xff0c;scheme是file。其中scheme和authority参数都是可选的&am…

css 水平垂直居中那些事

本文是在参考众大神文章基础上&#xff0c;整理的几个常用方案&#xff0c;另外也掺杂个人的一些猜想&#xff0c;如有不妥&#xff0c;请不吝指出下面开始正题,为了方便验证展示&#xff0c;下面的案例我会直接附上个人验证的源码截图 1. <!doctype html> <html lang…

python 循环指定次数_亮仔的Python之路Day7——Python循环语句

day7&#xff1a;2019-09-01今日学习目的&#xff1a;了解循环语句&#xff0c;使用代码解放劳动力实践是检验真理的唯一标准我们使用代码的最终目的是解放劳动力当你还在复制粘贴累的半死的时候别人随手几行代码就搞定今天学习的是2种循环语句一、什么是循环语句循环语句:可以…

iOS MBProgressHUD 之带底板的加载提示

文章来自&#xff1a;http://blog.csdn.net/ryantang03/article/details/7877120 MBProgressHUD是一个开源项目&#xff0c;实现了很多种样式的提示框&#xff0c;使用上简单、方便&#xff0c;并且可以对显示的内容进行自定义&#xff0c;功能很强大&#xff0c;很多项目中都有…

HEC-RAS如何修改SA/2D Connection的名称

RAS Mapper中打开几何文件&#xff0c;进入编辑模式。

python调试蓝牙适配器_我写了一个查看Android手机的蓝牙模块是否开启的代码。在AVD上调试,因为是电脑,没有蓝牙适配器,可是...

为什么我用到蓝牙手机上的时候&#xff0c;刚打开这个程序&#xff0c;就会停止工作呢&#xff1f;代码如下&#xff0c;代码格式什么没错。publicclassMainActivityextendsActivity{BluetoothAdaptermBluetoothAdapternull;O...为什么我用到蓝牙手机上的时候&#xff0c;刚打开…

CFD何为收敛

文章来自——【小白的CFD之旅】26 何为收敛 - 流沙[胡坤] - 博客园 在CFD计算中&#xff0c;每一个网格上都会存储众多物理量&#xff0c;因此每一个网格上的任一个物理量在计算迭代过程中都会存在一个残差&#xff0c;这意味着在一次迭代过程中&#xff0c;同一物理量在不同的…

如何使用 Microsoft Azure Media Services 现场直播,(Live Streaming) 直播流媒体系统

不久之前&#xff0c;微软公司宣布了 Microsoft Azure Media Services 实时直播服务 ( Live ) 开始进入技术预览阶段&#xff0c;公开接受用户测试。 而这些实时直播服务其实早已被 NBC 运动频道用于多项重大运动赛事直播&#xff0c;包括英超联赛、NHL、周日橄榄球之夜 ( Sund…

vue如何split_vue代码分割的实现(codesplit)

在vue单页应用中&#xff0c;若不做任何处理&#xff0c;所有vue文件会打包为一个文件&#xff0c;这个文件非常的大&#xff0c;造成网页在首次进入时比较缓慢。做了代码分割后&#xff0c;会将代码分离到不同的bundle中&#xff0c;然后进行按需加载这些文件&#xff0c;能够…

两相流计算中,如何用Tecplot提取水相断面平均物理量?

1.显示水相 1.导入计算结果case、data文件到Tecplot中 2.Tecplot菜单栏Plot-Blanking-Value Blanking... 以体积分数为变量进行blanking: 此时&#xff0c;只显示体积分数<0.5的区域 2.提取水相断面物理量断面平均值 1.切片 Slices-Details-选择需要的切片位置-Extrac…

【Android实战】Gallary+ImageSwicther图片查看器

仿照如今各大新闻站点图片新闻的浏览模式&#xff0c;上面展示详细图片&#xff08;ImageSwitch&#xff09;&#xff0c;以下是能够滑动的小图片(Gallery)。当中须要注意的是ImageSwitch须要定义一个工厂返回的组件&#xff0c;而且能够设置动画效果。Gallery用适配器载入布局…

陈伯雄lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

龙源期刊网http://www.qikan.com.cn基于AutoLisp的AutoCAD二次开发自动生成系统图作者&#xff1a;郎建山金江来源&#xff1a;《科技视界》2013年第22期【摘要】本文主要阐述了应用AutoLisp语言二次开发AutoCAD自动生成系统图的实现方案。【关键词】AutoCAD&#xff1b;AutoLi…

Tecplot中使用公式

如图&#xff0c;计算结果中只有x、y、z三个方向流速&#xff0c;如果要知道某点流速大小需要自定义公式 方法&#xff1a; 其中Tecplot中自定义公式规则见该文&#xff1a; Tecplot中使用公式