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 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双 ...
随机推荐
- “随手记”开发记录day12
就我们团队昨天的讨论,今天进行更改. 今天我们先简单的更改了之前的粉色背景图,因为用户反应总览界面的“总览”二字,是深粉色背景不太美观.进过多次更改之后使颜色变得更舒适.
- Codechef July Challenge 2020 Division 1 记录
目录 Missing a Point Chefina and Swaps Doctor Chef Chef and Dragon Dens LCM Constraints Weird Product ...
- git使用-标签管理
1.查看所有的标签 git tag 2.创建标签 git tag name 3.指定提交标签的信息 git tag -a name -m "comment" 4.删除标签 git ...
- 02-java实现单链表
02-手撸链表 本篇是恋上数据结构第一季个人总结 借鉴https://juejin.im/post/6844904001478066183#heading-0 本人git https://github ...
- Homekit_人体感应器
前置需求: 苹果手机一台 Homekit人体感应一台 USB供电线一根 这款产品内置人体红外感应器,使用圆环设计,增大了其接触面积,使感应变得更加灵敏,重量轻,方便将其粘贴到墙上,同时支持二次开发,如 ...
- 数据源管理 | 分布式NoSQL系统,Cassandra集群管理
本文源码:GitHub·点这里 || GitEE·点这里 一.Cassandra简介 1.基础描述 Cassandra是一套开源分布式NoSQL数据库系统.它最初由Facebook开发,用于储存收件箱 ...
- 【ASP.NET Core学习】使用JWT认证授权
概述 认证授权是很多系统的基本功能 , 在以前PC的时代 , 通常是基于cookies-session这样的方式实现认证授权 , 在那个时候通常系统的用户量都不会很大, 所以这种方式也一直很好运行, ...
- python设计模式之解释器模式
python设计模式之解释器模式 对每个应用来说,至少有以下两种不同的用户分类. [ ] 基本用户:这类用户只希望能够凭直觉使用应用.他们不喜欢花太多时间配置或学习应用的内部.对他们来说,基本的用法就 ...
- Oracle元数据信息
一.schema操作 1)查看当前schema select user, sys_context('userenv','current_schema') from dual; 2)切换schema a ...
- CF 1383B GameGame
传送门 题目:给定长度为n的数组a,A和B轮流拿走一个数,开始时A和B拥有的v为0,A和B每次拿走一个数时,他的v = v^ ai,A和B都很聪明,问都按照最优的情况考虑,拿完所有数之后A和B的v的大 ...