首页 > 其他分享 >最优贸易

最优贸易

时间:2023-10-15 10:22:04浏览次数:33  
标签:end int ## add 贸易 最优 include define

P1073 [NOIP2009 提高组] 最优贸易

我们考虑一个中间点,求出从 \(1\) 出发到它的最小买入价,从它到 \(n\) 的最大卖出价。(从它到 \(n\) 的求解是在反向图中从 \(n\) 开始跑)

可以发现,这个做法是不会遗漏情况的。

这个问题很像最短路问题,但是注意它第一次得到的答案并不是最终答案,所以无法使用 dijkstra 求解。

我们可以用 spfa 求解它。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define Ed for(int i=h[x];~i;i=ne[i])
#define Ls(i,l,r) for(int i=l,i##end=r;i<i##end;++i)
#define Rs(i,l,r) for(int i=l,i##end=r;i>i##end;--i)
#define Le(i,l,r) for(int i=l,i##end=r;i<=i##end;++i)
#define Re(i,l,r) for(int i=l,i##end=r;i>=i##end;--i)
#define L(i,l) for(int i=0,i##end=l;i<i##end;++i)
#define E(i,l) for(int i=1,i##end=l;i<=i##end;++i)
#define W(t) while(t--)
#define Wh while

const int N=100010,M=2000010;
int n,m,h[N],e[M],ne[M],idx,w[N],dis[N],dis2[N],q[N];//don't forget memset h!
bool st[N];
int min(int a,int b,bool t,int &c){//优美的代码
    int tmp=t?min(a,b):max(a,b);//判断是从哪里出发,决定求的是最大/最小
    if(tmp>c^t&&tmp!=c){//异或用来将大于小于号取反(本质上>反过来是<=,注意如果相等不判,导致死循环)
        c=tmp;
        return 1;
    }
    return 0;
}
void add(int a,int b){
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void spfa(int s,int dis[]){
    // cout<<s<<'\n';
    bool t=s==1;
    if(t)memset(dis+1,0x3f,n*4),memset(st+1,0,n);
    dis[s]=w[s];
    int hh=0,tt=0;
    q[tt++]=s,st[s]=1;
    Wh(hh!=tt){
        int x=q[hh++];
        st[x]=0;
        hh=hh==N?0:hh;
        Ed{
            int j=e[i];
            if(i&1^!t)continue;//判是走正向边还是反向边,利用存边的奇偶性
            if(min(w[j],dis[x],t,dis[j])&&!st[j])st[j]=1,q[tt++]=j,tt=tt==N?0:tt;
        }
    }
}
int main(){
    #ifndef ONLINE_JUDGE
    freopen("1.in","r",stdin);
    #endif
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    memset(h,-1,n*4+4);
    E(i, n)cin>>w[i];
    E(i, m){
        int a,b,c;
        cin>>a>>b>>c;
        add(a,b),add(b,a);//43行de
        if(c==2)add(b,a),add(a,b);
    }
    spfa(n,dis2);
    spfa(1,dis);
    int ans=0;
    E(i, n)ans=max(ans,dis2[i]-dis[i]);//,cout<<dis[i]<<' '<<dis2[i]<<'\n';
    cout<<ans;
    return 0;
}

标签:end,int,##,add,贸易,最优,include,define
From: https://www.cnblogs.com/wscqwq/p/17765312.html

相关文章

  • ACK 云原生 AI 套件:云原生 AI 工程化落地最优路径
    作者:胡玉瑜(稚柳)前言在过去几年中,人工智能技术取得了突飞猛进的发展,涵盖了机器学习、深度学习和神经网络等关键技术的重大突破,这使得人工智能在各个领域都得到广泛应用,对各行各业产生了深远的影响。特别值得一提的是,近年来,ChatGPT的快速发展,使得人工智能技术在自然语言处理和......
  • 最优二叉树—哈夫曼(huffman)树
    哈夫曼树又称最优二叉树,是一类带权路径长度最短的二叉树,有着广泛的应用。基本概念权:将树中的结点赋上一个有着某种意义的数值路径:从A结点道B结点所经过的分支序列路径长度:从A结点道B结点所经过的分支数目查找效率平均查找长度(ASL)取决于树的高度ASL=(1+2*2+3)/4=2     ......
  • 最优二叉树(Huffman 树)
    题目\(k\)叉树\(T\)有\(n\)片树叶。每片树叶\(v_i\)的权为\(w_i\),深度为\(l(v_i)\)。\(T\)的权值为\(W=\sumw_i\l(v_i)\)。求\(W\)的最小值。和在保证\(W\)最小的情况下,\(\maxl(v_i)\)的最小值。数据范围:\(1\len\le10^5\),\(2\lek\le10\),\(0<w_i......
  • 找接口的最优吞吐量 每秒事务处理数
    1.循环并发在聚合报告中找到波动不大的吞吐量本次找到的是每秒处理3177个事务1秒发送1个请求永远循环  聚合报告 2预估并发是6000个,所以需要将线程数改成2 ......
  • 全球贸易紧张局势下,现货黄金能否成为避险资产
    随着全球贸易紧张局势的不断升级,投资者寻求避险资产的需求也逐渐增加。在这种背景下,现货黄金是否能够成为一个可靠的避险资产备选方案呢?本文将从几个方面探讨现货黄金作为避险资产的前景。第一:黄金历史上的避险属性黄金具有长期以来被认为是避险资产的特性。在不稳定的全球经济......
  • EasyGBS安防视频监控有哪些存储方式,哪种存储方式最优
    EasyGBS视频监控系统涉及到大量的视频数据,需要对这些数据进行存储,以备日后查看或备份。视频监控的存储需求需要根据场所的实际情况进行选择,以保证监控数据的有效存储和日后的调阅、回溯。 当前视频监控的存储方式,通常有以下几种:1.硬盘录像机(DVR)存储:DVR利用硬盘来储存视频数据,......
  • NOI2023 D2T1 贸易
    图中不存在横插边,\(u\rightsquigarrowv\)可拆成\(u\rightsquigarrow\operatorname{lca}(u,v)\rightsquigarrowv\)计算。对\(u\rightsquigarrow\operatorname{lca}(u,v)\),不可能走第二类道路,树形DP统计每条边被经过的次数并累加答案即可,时间复杂度\(\mathcalO(2......
  • “指针跃动”受邀参加全球贸易服务峰会
    “指针跃动”受邀参加全球贸易服务峰会有“服”同享共赢未来引子在全球化日益盛行的今天,贸易不再仅仅是物质的交流,更涉及到服务、理念、文化和科技的共享。中国国际服务贸易交易会全球贸易服务峰会,就是这个趋势的集中体现。在这次峰会上,“指针跃动”受邀参加中国......
  • 【转】最优日志系统,Log4j 还是 Logback?
    引言在Java项目开发中,一个正式的项目,一定离不开日志的输出,而常用的日志输出框架又绕不开Log4j和Loback。Log4jApacheLog4j是一种Java日志记录工具,它是ApacheSoftwareFoundation下的一个开源项目。Log4j旨在帮助程序员在其应用程序中记录日志,并且能够根据需要配置......
  • 基于springboot的贸易行业crm系统
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于springboot的贸易行业crm系统的开发全过程。通过分析基于springboot的贸易行业crm系统管理的不足,创建了一个计算机管理基于springboot的贸易行业crm系统的方案。文章介绍了基于spr......