洛谷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;
}

结束喽!

最新文章

  1. Chapter 5: Design and implement security
  2. 让padding、border等不占据宽度
  3. 解决Linux中java.net.UnknownHostException: oracledb.sys.iflashbuy.com问题
  4. 高灵活低耦合Adapter快速开发攻略
  5. Delphi 文字跑马灯
  6. 查看被锁的数据[Z]
  7. jQuery为啥要提供一个load()方法?
  8. 完全删除Postgresql
  9. 深搜(DFS)广搜(BFS)详解
  10. WordPress文章首行缩进
  11. maven无法下载oracle驱动包
  12. Java...点点点语法
  13. IniHelper
  14. Gradle 同步 已经开始 Gradle sync started
  15. redis调优 -- 内存碎片
  16. sql 拼接同列的值
  17. c++ 类前置声明【转】
  18. laravel自定义分页功能的实现:
  19. openstack neutron 简单理解
  20. eclipse安装freemarker插件【转】

热门文章

  1. Git科普文,Git基本原理&amp;各种骚操作
  2. 洛谷3月月赛div2 题解(模拟+数学+贪心+数学)
  3. NIO(一):Buffer缓冲区
  4. 【工具】之002-Mac下常用工具
  5. MyBatisPlus乐观锁,乐观锁竟然如此简单
  6. linux系统中SSH免密设置报错
  7. [机器学习] keras:MNIST手写数字体识别(DeepLearning 的 HelloWord程序)
  8. java System类、Math类、Arrays类
  9. java 多态二
  10. Homekit_人体感应器