P1073 最优贸易 分层图+最长路
洛谷p1073 最优贸易
链接
首先易得暴n2的暴力,暴力枚举就行
显然1e5的数据是会炸的
我们再分析题意,发现一共分为两个个步骤,也可以说是状态,即在一个点买入,在另一个点卖出,我们可以构建一个三层分层图
第一层的每个点和第二层的对应点各连接一条权值为-val[i](val[i]表示i号点的水晶价格)的单向边
表示在i号点买进,
再在第二层的每个点向第三层的对应点各连接一条权值为val[j]的有向边
表示在j号点卖出,
构建好分层图后
我们在分层图上跑最长路
以第三层中的n号点为终点
便可求解
即使有负权,可我们因为跑的是最长路
所以dijistla不受影响
ac代码如下
时间复杂度边为3mlog3m
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<queue>
#define inf -0x3f3f3f3f
using namespace std;
const int maxn=5e5;
inline int read(){
int ret=0;
int f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-f;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
ret=ret*10+(ch^'0');
ch=getchar();
}
return f*ret;
}
struct edge{
int nex;
int to;
int v;
}e[maxn*3];
struct node{
int u,d;
bool operator <(const node &x) const{
return x.d<d;
}
};
int head[maxn*3];
int cnt;
void add(int u,int to,int v){
cnt++;
e[cnt].nex=head[u];
e[cnt].to=to;
e[cnt].v=v;
head[u]=cnt;
}
int n,m;
int dis[maxn*3];
int val[maxn];
inline void di(int s){
for(int i=1;i<=n;i++){
dis[i]=inf;
}
dis[s]=0;
priority_queue<node>q;
q.push((node){s,0});
while(!q.empty()){
node f=q.top();
q.pop();
int u=f.u;
int d=f.d;
if(dis[u]!=d)
continue;
for(int i=head[u];i;i=e[i].nex){
int v=e[i].v;
int y=e[i].to;
if(dis[u]+v>dis[y]){
dis[y]=dis[u]+v;
q.push((node){y,dis[y]});
}
}
}
}
int main(){
// freopen("a.in","r",stdin);
n=read();
m=read();
for(int i=1;i<=n;i++){
val[i]=read();
add(i,i+n,-val[i]);
add(i+n,+2*n+i,val[i]);
}
int x,y,z;
for(int i=1;i<=m;i++){
x=read();
y=read();
z=read();
add(x,y,0);
add(x+n,y+n,0);
add(x+2*n,y+2*n,0);
if(z==2){
add(y,x,0);
add(y+n,x+n,0);
add(y+2*n,x+2*n,0);
}
}
n=n*3;
di(1);
cout<<dis[n];
return 0;
}
结束喽!
P1073 最优贸易 分层图+最长路的更多相关文章
- [USACO15JAN]草鉴定Grass Cownoisseur (分层图,最长路,$Tarjan$)
题目链接 Solution 水水的套路题. 可以考虑到一个环内的点是可以都到达的,所以 \(tajan\) 求出一个 \(DAG\) . 然后 \(DAG\) 上的点权值就是 \(scc\) 的大小. ...
- P1073 最优贸易 建立分层图 + spfa
P1073 最优贸易:https://www.luogu.org/problemnew/show/P1073 题意: 有n个城市,每个城市对A商品有不同的定价,问从1号城市走到n号城市可以最多赚多少差 ...
- 洛谷 P1073 最优贸易 解题报告
P1073 最优贸易 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这\(m\)条道路中有一部分 ...
- Luogu P1073 最优贸易(最短路)
P1073 最优贸易 题意 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这\(m\)条道路中有 ...
- 洛谷P1073 最优贸易==codevs1173 最优贸易
P1073 最优贸易 题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一 ...
- 洛谷——P1073 最优贸易
P1073 最优贸易 n 个城市间以 m 条有向道路连接, 小 T 从 1 号城市出发, 将要去往 n 号城市.小 T 观察到一款商品 Z 在不同的城市的价格可能不尽相同,小 T 想要在旅行中的某一个 ...
- 洛谷 P1073 最优贸易 最短路+SPFA算法
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1073 最优贸易 题目描述 C国有 $ n $ 个大城市和 ...
- 洛谷P1073 最优贸易 [图论,DP]
题目传送门 最优贸易 题目描述 C 国有n 个大城市和m 条道路,每条道路连接这n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这m 条道路中有一部分为单向通行的道路,一部分为双向 ...
- Luogu P1073 最优贸易
题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双 ...
随机推荐
- 【FZYZOJ】细菌 题解(最短路)
题目描述 为了研究一种新型细菌(称它为S型细菌)的性质,Q博士将S型细菌放在了一个犹如迷宫一般的通道面前,迷宫中N个站点,每个站点之间以一种单向通道的形式连接,当然,也有可能某两个站点之间是互不联通的 ...
- SpringMvc异常处理和SpringMvc拦截器
1. 异常处理思路 Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServlet找异常处理器进 行异常的处理. SpringMVC的异 ...
- github开源文章生成pdf
最近需要研究ELK,然后在网上发现了有本书写的不错,然后搜到是在 github 上开源过的.这本书的时间有点久了,就想通过源码自己来生成一个 pdf 我使用的是 ubuntu 系统 step1:安装 ...
- 一文搞定Python正则表达式
本文对正则表达式和 Python 中的 re 模块进行详细讲解 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知 ...
- kubeadm部署1.17.3[基于Ubuntu18.04]
基于 Ubuntu18.04 使用 kubeadm 部署Kubernetes 1.17.3 高可用集群 环境 所有节点初始化 # cat <<EOF>> /etc/hosts ...
- VMware Workstation pro无法在Windows上运行,检查可在Windows上运行的此应用的更新版本
我的Windows版本是win10-1903,VMware版本比较老旧是VMware-10:国庆节后微软推送了一个新的更新补丁,更新之后发现VMware无法打开(未更新前正常). 更新补丁详情如下: ...
- Java 字节流
OutputStream此抽象类,是表示输出字节流的所有类的超类.操作的数据都是字节,定义了输出字节流的基本共性功能方法. OutputStream有很多子类,其中子类FileOutputStream ...
- java方法中参数传递与随机点名器、库存管理案例
一 参数传递 1.定义: 参数传递,可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数, 这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了.这种传递方式,我 们称 ...
- 深度强化学习:Deep Q-Learning
在前两篇文章强化学习基础:基本概念和动态规划和强化学习基础:蒙特卡罗和时序差分中介绍的强化学习的三种经典方法(动态规划.蒙特卡罗以及时序差分)适用于有限的状态集合$\mathcal{S}$,以时序差分 ...
- AS 新电脑clone项目报错:Clone failed: Authentication failed for 'https://gitee.com/XXX/Demo.git/'
在新的电脑上安装Android Studio,并且使用git clone 项目,报以下错误: Clone failed: Authentication failed for 'https://gite ...