“新华三杯”第十届成都信息工程大学ACM程序设计竞赛(同步赛)L. 怎么走啊(最短路+二分 分段函数)

题目

登录—专业IT笔试面试备考平台_牛客网

思路来源

衡阳师范学院ac代码、pj学弟

题解

大致可以证明,在w从1e5减小到1的过程中,

之前某条反向边没有用到,现在需要用到反向边,也就是正向边用到的变少了

这样的变化有sqrt个,二分每个变化时的临界点,复杂度似乎是O(nsqrtnlognlogn)的

但是由于只关注1到n的最短路,临界点&二分的量级很难卡满,只能说O(能过)了

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;
#define endl "\n"
#define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define int ll
const int N=1e5+10;
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
typedef pair<int,int> pii;
int n,m,d[N],st[N],ans[N],pre[N];
vector<array<int,3>> g[N];
int dijkstra(int W){
    for(int i=1;i<=n;i++) st[i]=0,d[i]=1e18;
    priority_queue<pii,vector<pii>,greater<pii>> q;
    q.push({0,1}); d[1]=0;
    while(!q.empty()){
        auto [dt,u]=q.top(); q.pop();
        if(st[u]) continue;
        st[u]=1;
        for(auto [j,w,f]:g[u]){
            int dis=dt;
            if(f) dis+=w*W;
            else dis+=w;
            if(d[j]>dis){
                d[j]=dis;
                pre[j]=u;
                q.push({d[j],j});
            }
        }
    }
    return d[n];
}
map<pii,int> mp;
int fun(){
    int cnt=0;
    for(int i=n;i;i=pre[i]) cnt+=mp[{pre[i],i}];
    return cnt;
}
void solve(){
    cin>>n>>m; 
    for(int i=1;i<=m;i++){
        int u,v,w; cin>>u>>v>>w;
        g[u].push_back({v,w,0});
        g[v].push_back({u,w,1});
        mp[{u,v}]=0;
        mp[{v,u}]=w;
    }
    int L=1;
    while(L<=1e5){
        int l=L,r=1e5; 
        int dis=dijkstra(l),sum=fun();
        while(l<r){
            int mid=(l+r+1)>>1;
            if(dijkstra(mid)==dis+(mid-L)*sum) l=mid;
            else r=mid-1;
        }
        for(int i=L;i<=l;i++) ans[i]=dis+(i-L)*sum;
        L=l+1;
    }
    int q; cin>>q;
    while(q--){
        int W; cin>>W;
        cout<<ans[W]<<endl;
    }
}
signed main(){
    IOS;
    int _=1;
    //cin>>_;
    while(_--){
        solve();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/241122.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Django中间价】项目中常用中间件

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、常见用法二、JWT中间价三、操作日志中间件1.在user的app下建立models类2.如图位置新建LogMiddleware.py3.django中添加中间件 四、全…

Pandas缺失数据处理

好多数据集都含缺失数据&#xff0c;缺失数据有多重表现形式 数据库中&#xff0c;缺失数据表示为NULL 在某些编程语言中用NA表示 缺失值也可能是空字符串&#xff08;’’&#xff09;或数值 在Pandas中使用NaN表示缺失值&#xff1b; NaN简介 Pandas中的NaN值来自NumPy库&a…

IPQ6010 vs IPQ8072 What’s the difference?|802.11AX WiFi6 Solution DR6018 DR8072

IPQ6010 vs IPQ8072 What’s the difference?|802.11AX WiFi6 Solution DR6018 DR8072 IPQ6010 vs IPQ8072: In-Depth Comparison and Selection Guide The rapid evolution of networking technologies has driven continuous innovation in routers and network devices. Am…

msvcp80.dll文件丢失怎么恢复?详解多种DLL文件修复方法

本文将为您详细介绍msvcp80.dll的定义、作用以及丢失的原因&#xff0c;并提供5个解决方法&#xff0c;帮助您解决这一问题。 一、msvcp80.dll是什么&#xff1f; msvcp80.dll是Microsoft Visual C Runtime Library中的一个动态链接库文件&#xff0c;它包含了许多C运行库函数…

SIM卡内部结构及外部物理接口

1. 内部组成 “SIM卡”是一个装有微处理器的芯片卡&#xff0c;它的内部有5个模块&#xff1a;1.微处理器CPU&#xff1a;控制SIM卡的运算和操作2.程序存储器ROM&#xff1a;存放片内操作系统&#xff0c;用户不可操作。3.工作存储器RAM&#xff1a;存放计算过程中的临时数据4…

Video anomaly detection with spatio-temporal dissociation 论文阅读

Video anomaly detection with spatio-temporal dissociation 摘要1.介绍2.相关工作3. Methods3.1. Overview3.2. Spatial autoencoder3.3. Motion autoencoder3.4. Variance attention module3.5. Clustering3.6. The training objective function 4. Experiments5. Conclusio…

基于Dockerfile创建镜像

Docker镜像的创建 1.基于现有镜像创建 //首先启动一个镜像&#xff0c;在容器里做修改 docker run -itd --name web centos:7 /bin/bash #启动容器docker exec -it web bash #进入容器​ yum install -y epel-release #安装epel源 yum install -y nginx #安装nginx …

共享门店会在未来新零售占据主角吗?

共享门店作为一种创新的商业模式&#xff0c;在未来新零售领域中可能会占据一定的角色&#xff0c;但具体是否会成为主角&#xff0c;还需要根据市场的发展和技术的进步来判断。 首先&#xff0c;共享门店模式通过资源共享、风险共担、客户共享和收益共享等方式&#xff0c;为…

Python 递归及目录遍历

递归调用&#xff1a;一个函数&#xff0c;调用了自身&#xff0c;称为递归调用 递归函数&#xff1a;一个会调用自身的函数 凡是循环能做的事&#xff0c;递归都能做。 目录 递归示例 普通方法实现 递归方式实现 计算分析&#xff1a; 递归遍历目录 引入os 遍历目录 执…

Unity | 渡鸦避难所-2 | 搭建场景并添加碰撞器

1 规范项目结构 上期中在导入一系列的商店资源包后&#xff0c;Assets 目录已经变的混乱不堪 开发过程中&#xff0c;随着资源不断更新&#xff0c;遵循一定的项目结构和设计规范是非常必要的。这可以增加项目的可读性、维护性、扩展性以及提高团队协作效率 这里先做下简单的…

【BigDecimal类—常用API系列】解决java浮点计算精度损失问题

文章目录 Java浮点计算精度损失问题BigDecimal进行精确运算的解决方案 Java浮点计算精度损失问题 BigDecimal它是干什么用的呢&#xff1f;什么是java浮点计算精度损失问题&#xff1f;我们先看一段代码&#xff0c;看这个代码有什么问题&#xff1f;再说BigDeimal这个类是干什…

【机器学习】亚马逊云科技基础知识:以推荐系统为例。你知道机器学习的关键所在么?| 机器学习管道的各个阶段及工作:以Amazon呼叫中心转接问题为例讲解

有的时候,暂时的失利比暂时胜利要好得多。 ————经典网剧《mao pian》,邵半仙儿 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域TOP

深入了解—C++11特性

目录 一、 C11简介 二、初始化列表 2.1 C98中{}的初始化问题 2.2 内置类型的列表初始化 2.3 自定义类型的列表初始化 2.3.1. 标准库支持单个对象的列表初始化 2.3.2. 多个对象的列表初始化 三、变量类型推导 3.1 为什么需要类型推导 3.2 decltype类型推导 3.2.1. 推…

方法-PC端远程调试分布式训练

本专栏为深度学习的一些技巧,方法和实验测试,偏向于实际应用,后续不断更新,感兴趣童鞋可关,方便后续推送 简介 一些简单的代码我们使用Pycharm本地调试就能运行成功&#xff0c;但在诸如使用GPU进行分布式训练和推断等场景中&#xff0c;由于我们本地的电脑没有GPU或者没有多…

慢SQL的治理经验

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、慢SQL导致的后果 二、可能导致慢SQL的原因 三、如何发现慢SQL 3.1 JVM Sandbox 四、识别高危SQL 4.1 阿里的重点强制SQL规…

docker容器-compose单机容器编排

yaml文件&#xff1a;是一种标记语言&#xff0c;以竖列的形式展示序列化的数据格式&#xff0c;可读性高 类似于json格式&#xff0c;语法简单 yaml通过缩进来表示数据结构&#xff0c;连续的项目用-减号来表示 yaml文件使用的注意事项 1、大小写敏感 2、通过缩进表示层级…

VUE3语法--toRefs与toRef用法

1、功能概述 ref和reactive能够定义响应式的数据&#xff0c;当我们通过reactive定义了一个对象或者数组数据的时候&#xff0c;如果我们只希望这个对象或者数组中指定的数据响应&#xff0c;其他的不响应。这个时候我们就可以使用toRefs和toRef实现局部数据的响应。 toRefs是…

AntDB数据库致力降本增效的某省高速清分结算实践——优势总结和推广意义

中国正处于数字化转型的关键时期&#xff0c;高速公路正朝着智慧高速的建设迈进。不论是传统的传统高速卡口&#xff0c;诸如“数据采集、数据上传”和“数据处理”的基础建设1.0时代&#xff0c;还是不久将来即将实现的具备“车辆协同智能”、“边缘控制中心”及“智慧高速云控…

vue+element项目中页面多个接口异常,只提示一次异常信息

有时候一个页面会同时调多个接口&#xff0c;但是多个接口异常&#xff0c;需要做提示&#xff0c;那么提示的时候会弹出很多的提示信息&#xff0c;这无疑让体验感降低很多。 所以针对这种情况&#xff0c;我们配合element UI统一做一个异常状态的处理&#xff0c;只能显示一…