首页 > TAG信息列表 > P1073

P1073 [NOIP2009 提高组] 最优贸易 (最短路spfa)

本题就是在一条1-n的路径上找p,q(先经过p),使得q-p最大。 考虑建正反图,正图上求出d[x],表示1-x的路径经过的节点最小值,反图上则从n开始求出f[x],x-n的最大值,最后枚举断点i,取最大的f[i]-d[i]就是答案。 基于动态规划的思想。 1 #include<bits/stdc++.h> 2 using namespace std; 3 con

P1073 [NOIP2009 提高组] 最优贸易做题笔记

思路是建一个反图,在原图上从点 \(1\) 开始跑一遍 \(SPFA\),算出点 \(1\) 到点 \(x\) 的最短路径上的价格最小值 \(e_x\);再在反图上从点 \(n\) 开始跑一遍 \(SPFA\),算出点 \(n\) 到点 \(1\) 的最短路径上的价格最大值 \(f_x\),答案为 \(\max(f_x - e_x) (1 \le x \le n)\)。 #include

P1073 [NOIP2009 提高组] 最优贸易

题面 \(C\)国有\(n\)个大城市和\(m\) 条道路,每条道路连接这 \(n\)个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 \(m\) 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 $1 $条。 \(C\)国幅员辽阔,各地的资源分布

P1073 [NOIP2009 提高组] 最优贸易 题解 分层图最短路

题目链接:https://www.luogu.com.cn/problem/P1073 解题思路: 将每个点 \(u\),拆成三层: 第 \(0\) 层:\((u, 0)\); 第 \(1\) 层:\((u, 1)\); 第 \(2\) 层:\((u, 2)\)。 各层之间依次建图。 然后对于任意点 \(u\),设点 \(u\) 的权值为 \(a_u\),则: 从 \((u,0)\) 连 \((u,1)\) 一条权值为 \(a

洛谷 P1073 最优贸易(DFS+DP)

题目链接:https://www.luogu.com.cn/problem/P1073   设f[i][0/1], f[i][0]表示走到i点的最小价格,f[i][1]表示走到i点的最大收益(差值)。转移过于简单。 注意DFS中的剪枝。   AC代码: 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 using namespace std; 5

P1073 最优贸易 分层图+最长路

洛谷p1073 最优贸易 链接 首先易得暴n2的暴力,暴力枚举就行 显然1e5的数据是会炸的 我们再分析题意,发现一共分为两个个步骤,也可以说是状态,即在一个点买入,在另一个点卖出,我们可以构建一个三层分层图 第一层的每个点和第二层的对应点各连接一条权值为-val[i](val[i]表示i号点的水晶价

P1073 最优贸易 题解

CSDN同步 原题链接 简要题意: 给定一个图,每个点有点权。一个人从 \(1\) 号点出发,可以任意走路径,也可以任意停止旅行。每个点的点权表示水晶球的价格,初始这个人没有水晶球,可以在任意点卖出,也可以在任意点买。只能买卖一次。当然也可以不卖。求他的最大盈利。(赚不了则输出 \(0\)) 本题

P1073-最优贸易

1 #include <bits/stdc++.h> 2 using namespace std; 3 #define _for(i,a,b) for(int i = (a);i < b;i ++) 4 #define _rep(i,a,b) for(int i = (a);i > b;i --) 5 #define INF 0x3f3f3f3f 6 #define pb push_back 7 #define maxn 5053900 8 typedef long long l

luogu P1073 最优贸易

题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市。任意两个 城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路,双向通行的道路在统计条数时也计为 1 条。 C 国幅员辽阔,各地的资源分布情况各不相同,这

P1073 最优贸易

题目注意事项   只能进行一次贸易   必须以1点出发,最后必须能到N点   买入点一定能到卖出点,卖出点不一定能到买入点。 算法分析   建立正图E1,反图E2   SPFA1求解从1出发到达每个点的路径上价格最小值Min[],到达不了则Min[]=∞   SPFA2求解从N出发到达每个点的路径上

洛谷 P1073 最优贸易 题解

题面 大家都是两遍SPFA吗?我这里就一遍dp啊; 首先判断对于一个点u,是否可以从一号点走到这里,并且可以从u走到n号点; 对于这样的点我们打上标记; 那么抛出水晶球的点一定是从打上标记的点中选出一个;(自己可以理解一下) 然后跑一遍dp,dp[i]表示从点1到点i的若干条路径中,所经过的点的权值最

洛谷-题解 P1073最优贸易

https://www.luogu.org/problemnew/show/P1073 2009年提高组t3,用了$spfa$ 相对于普通的$spfa$也就更新最优解时有点不一样 注意:对于环没有必要判断,反正环不会让答案不断更新 1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstrin

P1073 最优贸易 分层图最短路

   题目描述 CC国有nn个大城市和mm 条道路,每条道路连接这 nn个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 mm 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 11条。 CC国幅员辽阔,各地的资源分布情况各

洛谷 P1073 最优贸易

我们维护\(d[i,0/1]\),其中\(d[i,0]\)表示从1到\(i\)号结点经过路径中的最小值,\(d[i,1]\)表示从\(n\)出发到\(i\)的最大值。之后可以考虑枚举中转站\(i\),利用\(d[i,1]-d[i,0]\)来更新答案即可。这样做的正确性就是这样可以覆盖所有的情况(肯定会经过一个中转站。 这里我用的dijkstra

洛谷P1073 最优贸易

题面要求的是一个差值,即走过一条路径能找到的路径上最大值-最小值。 那么相当于跑一遍最长路和一遍最短路,当然不是概念上的最长路最短路,这里把dis[v]的松弛改成用路径上传递来的最大/最小值维护,而不是上一个点传来的dis[u]+w(u,v)。 同时这样的松弛中还要和这个点本身的权值作比较

P1073 最优贸易 建立分层图 + spfa

P1073 最优贸易:https://www.luogu.org/problemnew/show/P1073 题意:    有n个城市,每个城市对A商品有不同的定价,问从1号城市走到n号城市可以最多赚多少差价。(旅游为主,赚钱为辅,所以买入和卖出只进行一次。 思路:   建一个有三层的图,三层都是相同的普通的城市路线,第一层向第二层连