【SPFA】最优贸易(luogu 1073)

最优贸易

luogu 1073

题目大意:

有n个城市和m条线路连接着这些城市(当编号为1时是有向,2时是无向),从1城市出发到n城市,每个城市都有固定的水晶球价格(进价和售价一样),从路过的一个城市买下水晶球,然后在接下来的某个城市卖出(只能进行一次买卖),问最多赚多少钱,当买卖一定亏本时,则输出0

原题:

题目描述

C C国有 n n个大城市和 mm 条道路,每条道路连接这 nn个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 mm 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 1 1条。
C C国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同。但是,同一种商品在同一个城市的买入价和卖出价始终是相同的。
商人阿龙来到 CC 国旅游。当他得知同一种商品在不同城市的价格可能会不同这一信息之后,便决定在旅游的同时,利用商品在不同城市中的差价赚回一点旅费。设 CC 国 n 个城市的标号从 1~ n1 n,阿龙决定从 1 1号城市出发,并最终在 nn 号城市结束自己的旅行。在旅游的过程中,任何城市可以重复经过多次,但不要求经过所有 nn 个城市。阿龙通过这样的贸易方式赚取旅费:他会选择一个经过的城市买入他最喜欢的商品――水晶球,并在之后经过的另一个城市卖出这个水晶球,用赚取的差价当做旅费。由于阿龙主要是来 CC 国旅游,他决定这个贸易只进行最多一次,当然,在赚不到差价的情况下他就无需进行贸易。
假设 C C国有 55个大城市,城市的编号和道路连接情况如下图,单向箭头表示这条道路为单向通行,双向箭头表示这条道路为双向通行。
在这里插入图片描述
假设 1~n1 n 号城市的水晶球价格分别为 4,3,5,6,14,3,5,6,1。
阿龙可以选择如下一条线路:11->22->33->55,并在 2 2号城市以 33 的价格买入水晶球,在 33号城市以 5 5的价格卖出水晶球,赚取的旅费数为 2。
阿龙也可以选择如下一条线路 11->44->55->44->55,并在第1 1次到达 55 号城市时以 1 1的价格买入水晶球,在第 22 次到达 44 号城市时以 66 的价格卖出水晶球,赚取的旅费数为 55。
现在给出 n n个城市的水晶球价格,mm 条道路的信息(每条道路所连接的两个城市的编号以及该条道路的通行情况)。请你告诉阿龙,他最多能赚取多少旅费。

输入输出格式

输入格式:

第一行包含 22 个正整数 n n和 mm,中间用一个空格隔开,分别表示城市的数目和道路的数目。
第二行 n 个正整数,每两个整数之间用一个空格隔开,按标号顺序分别表示这 n 个城市的商品价格。
接下来 mm 行,每行有 3 3个正整数x,y,zx,y,z,每两个整数之间用一个空格隔开。如果 z=1z=1,表示这条道路是城市 x x到城市 y y之间的单向道路;如果 z=2z=2,表示这条道路为城市 x x和城市y y之间的双向道路。

输出格式:

一 个整数,表示最多能赚取的旅费。如果没有进行贸易,则输出 00。

输入输出样例

输入样例#1:

5 5 
4 3 5 6 1 
1 2 1 
1 4 1 
2 3 2 
3 5 1 
4 5 2 

输出样例#1:

5

说明

【数据范围】

输入数据保证 11 号城市可以到达 n n号城市。
对于 10%的数据,1≤n≤61≤n≤6。
对于 30%的数据,1≤n≤1001≤n≤100。
对于 50%的数据,不存在一条旅游路线,可以从一个城市出发,再回到这个城市。
对于 100%的数据,1≤n≤1000001≤n≤100000,1≤m≤5000001≤m≤500000,1≤x1≤x,y≤ny≤n,1≤z≤21≤z≤2,1≤1≤各城市
水晶球价格≤100≤100。
NOIP 2009 提高组 第三题

解题思路:

记录下每个城市水晶球的价格,用一个minn来存取,从1城市到当前城市的最小买入(要先预处理,赋为一个大于100的值),然后用best来代表从1城市到当前城市做完买卖的最大收入,当当前城市的最小买入或者可以到达的城市的价格小于可以到达的城市的最小买入,就代替掉它,然后best=best和这个城市的水晶球价格减去最小买入,然后当当前城市的最大收入大于可以到达的城市的最大收入就代替并入队

代码:

#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream> 
using namespace std;
int n,m,x,y,c,w,now,b[100005],head[100005],p[100005];
struct rec
{int to,next;
}a[1000005];
struct recc
{int minn,best;
}f[100005];
int main()
{scanf("%d %d",&n,&m);for (int i=1;i<=n;++i){scanf("%d",&b[i]);f[i].minn=2147483647;//初始值}for (int i=1;i<=m;++i){scanf("%d %d %d",&x,&y,&c);a[++w].to=y;//链表存法a[w].next=head[x];head[x]=w;if (c==2){a[++w].to=x;//反向a[w].next=head[y];head[y]=w;}}f[1].minn=b[1];//预处理p[1]=1;//记录queue<int> d;d.push(1);//入队while (!d.empty()){now=d.front();//取出来d.pop();for (int i=head[now];i;i=a[i].next){if (min(f[now].minn,b[a[i].to])<f[a[i].to].minn)//最小买入{f[a[i].to].minn=min(f[now].minn,b[a[i].to]);f[a[i].to].best=max(f[a[i].to].best,b[a[i].to]-f[a[i].to].minn);//取最小值if (!p[a[i].to]){p[a[i].to]=1;d.push(a[i].to);}}if (f[now].best>f[a[i].to].best)//最大收入{f[a[i].to].best=f[now].best;if (!p[a[i].to]){p[a[i].to]=1;d.push(a[i].to);}}}p[now]=0;}printf("%d",f[n].best);//输出
}

备注:

还有一种方法是从前面往后SPFA找最小买入,从后面往前SPFA找最大卖出,然后搜每一个点,找出一个最大卖出比最小买入多得最多的点,输出最大卖出比最小买入多的,但因为本人太水,就不写了

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

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

相关文章

Razor Page Library:开发独立通用RPL(内嵌wwwroot资源文件夹)

Demo路径&#xff1a;https://github.com/yanshengjie/RPL.Demo1. IntroductionRazor Page Library 是ASP.NET Core 2.1引入的新类库项目&#xff0c;属于新特性之一&#xff0c;用于创建通用页面公用类库。也就意味着可以将多个Web项目中通用的Web页面提取出来&#xff0c;封装…

Problem H Rock Paper Scissors,FFT

题目 题目链接 题意 给出两段石头剪刀布的顺序SS和T" role="presentation" style="position: relative;">TT&#xff0c;其中TT要短一些,现在让你把T" role="presentation" style="position: relative;">TT往SS的…

.NET Core微服务之基于Ocelot实现API网关服务

一、啥是API网关&#xff1f;API 网关一般放到微服务的最前端&#xff0c;并且要让API 网关变成由应用所发起的每个请求的入口。这样就可以明显的简化客户端实现和微服务应用程序之间的沟通方式。以前的话&#xff0c;客户端不得不去请求微服务A&#xff08;假设为Customers&am…

[译]RabbitMQ教程C#版 - 发布订阅

先决条件本教程假定RabbitMQ已经安装&#xff0c;并运行在localhost标准端口&#xff08;5672&#xff09;。如果你使用不同的主机、端口或证书&#xff0c;则需要调整连接设置。从哪里获得帮助如果您在阅读本教程时遇到困难&#xff0c;可以通过邮件列表联系我们。1.发布/订阅…

用ASP.NET Core 2.1 建立规范的 REST API -- 缓存和并发

本文所需的一些预备知识可以看这里: 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 和 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) 准备项目建立Richardson成熟度2级的POST、GET、PUT、PATCH、DELETE的RESTful API请看这里&#xff1a;用ASP.NET Core …

2017 SEERC Divide and Conquer 树上差分

题目 题目大意&#xff1a;给出两颗树的复合图(即这张图是由两颗树拼起来的)&#xff0c;询问最小割掉多少条边&#xff0c;可以使得图不联通&#xff0c;并输出方案数。 分析 我觉得这是一道很难的题目&#xff0c;因为比较难想&#xff0c;前提结论比较多。 首先我们需要…

青蛙跳荷叶

青蛙跳荷叶 题目大意&#xff1a; 有n个点&#xff0c;从1开始到跳完这些点&#xff0c;且每次的距离不能相等&#xff0c;一个点不能到多次 原题&#xff1a; 题目描述 从前&#xff0c;有一个小青蛙决定去荷叶上练习跳跃.现在有n个荷叶排成一排&#xff0c;小青蛙一开始…

基于 Consul 实现 MagicOnion(GRpc) 服务注册与发现

0.简介0.1 什么是 ConsulConsul是HashiCorp公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。这里所谓的服务&#xff0c;不仅仅包括常用的 Api 这些服务&#xff0c;也包括软件开发过程当中所需要的诸如 Rpc、Redis、Mysql 等需要调用的资源。简而言之 Con…

【DFS】排排坐

排排坐 题目大意&#xff1a; 有n个方块&#xff0c;有一些是黑色&#xff0c;有一些是白色&#xff0c;可以点击一个方块使它和它旁边的方块反转颜色&#xff08;黑变白&#xff0c;白变黑&#xff09;&#xff0c;问最少要点多少次才能将方块 们 变成目标的方块们&#xff…

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

预备知识: 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) 准备项目建立成熟度2级的 API请看这里&#xff1a;用ASP.NET Core 2.0 建立规范的 REST API -- GET 和 POST, 用ASP.NET Core 2.0 建立规范的 REST AP…

华为资深工程师:码农很多,但程序员并不多......

“春节假期&#xff0c;与几位友人小聚&#xff0c;大家互道工作顺利、平安健康云云......期间一位驰骋商界多年的老友问&#xff1a;“你现在在华为做什么工作呀?”我很骄傲地说&#xff1a;”系统架构师“&#xff0c;可是他却愣了很久。但当我老婆在旁边补上一句“码农“时…

VS2017 15.8第二个预览版本提升了对CPU Profiling和F#的支持

VS2017 15.8第一个预览版本的特性包括对ARM64构建的支持、ASP.NET Core对Docker的支持以及重新引入LibMan。在15.8的第二个预览版本中&#xff0c;微软发布了一个新Google Android模拟器的预览功能&#xff0c;它能够与Hyper-V兼容。这样的话&#xff0c;最新的Android模拟器就…

ASP.NET Core Razor生成Html静态文件

一、前言最近做项目的时候&#xff0c;使用Util进行开发&#xff0c;使用Razor写前端页面。初次使用感觉还是不大习惯&#xff0c;之前都是前后端分离的方式开发的&#xff0c;但是使用Util封装后的Angular后&#xff0c;感觉开发效率还是杠杠滴。二、问题在发布代码的时候&…

一文看懂.NET的各种变体

曾几何时&#xff0c;我们只有一个.NET&#xff0c;叫作.NET Framework。如果想要开发.NET应用程序&#xff0c;只要使用.NET Framework即可&#xff0c;非常简单。几年之后&#xff0c;出现了.NET变种的寒武纪大爆发&#xff08;我们称之为“.NET大爆炸”&#xff09;&#xf…

【最短路】【Floyed】医院设置(ssl 1614)

医院设置 ssl 1614 题目大意&#xff1a; 有n个点&#xff0c;在一个点上安医院&#xff0c;使这个点到其他点的最短路之和最小 原题&#xff1a; Description 设有一棵二叉树&#xff08;如右图&#xff09;。其中&#xff0c;圈中的数字表示结点中居民的人口。圈边上数…

拓展 NLog 优雅的输送日志到 Logstash

在上上篇博客通过对aspnetcore启动前配置做了一些更改&#xff0c;以及对nlog进行了自定义字段&#xff0c;可以把请求记录输送到mysql&#xff0c;正式情况可能不会这么部署。因为近期也在学习elk&#xff0c;所以就打算做一个实例&#xff0c;结合nlog把日志输送到logstash&a…

曼哈顿距离与切比雪夫距离的转化及prufer序列

目录 曼哈顿距离与切比雪夫距离的相互转化prufer序列 1. 曼哈顿距离 与 切比雪夫距离 的相互转化 曼哈顿距离 |x1−x2||y1−y2|max(x1−x2y1−y2,x1−x2−y1y2,−x1x2y1−y2,−x1x2−y1y2)|x1−x2||y1−y2|max(x1−x2y1−y2,x1−x2−y1y2,−x1x2y1−y2,−x1x2−y1y2)|x_1 - x…

[译]如何在.NET Core中使用System.Drawing?

你大概知道System.Drawing&#xff0c;它是一个执行图形相关任务的流行的API&#xff0c;同时它也不属于.NET Core的一部分。最初是把.NET Core作为云端框架设计的&#xff0c;它不包含非云端相关API。另一方面&#xff0c;.NET Core是跨平台框架&#xff0c;它不包含任何操作系…

关于Visual Studio 2019的前期详情

近日&#xff0c;来自微软公司的 John Montgomery 正式宣布&#xff0c;Visual Studio 2019已进入开发阶段。Montgomery 表示&#xff0c;之所以选择在这个时间点公开这个消息&#xff0c;是因为微软准备在 GitHub 上公开可见的项目&#xff08;包括 .NET 和 Roslyn&#xff09…

开源的,跨平台的.NET机器学习框架ML.NET

微软在Build 2018大会上推出的一款面向.NET开发人员的开源&#xff0c;跨平台机器学习框架ML.NET。 ML.NET将允许.NET开发人员开发他们自己的模型&#xff0c;并将自定义ML集成到他们的应用程序中&#xff0c;而无需事先掌握开发或调整机器学习模型的专业知识。在采用通用机器学…