news 2026/3/23 17:52:15

信奥赛C++提高组csp-s之倍增算法思想及应用案例(3)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
信奥赛C++提高组csp-s之倍增算法思想及应用案例(3)

信奥赛C++提高组csp-s之倍增算法思想及应用案例(3)

题目描述

小 A 的工作不仅繁琐,更有苛刻的规定,要求小 A 每天早上在6 : 00 6:006:00之前到达公司,否则这个月工资清零。可是小 A 偏偏又有赖床的坏毛病。于是为了保住自己的工资,小 A 买了一个空间跑路器,每秒钟可以跑2 k 2^k2k千米(k kk是任意自然数)。当然,这个机器是用longint存的,所以总跑路长度不能超过maxlongint千米。小 A 的家到公司的路可以看做一个有向图,小 A 家为点1 11,公司为点n nn,每条边长度均为一千米。小 A 想每天能醒地尽量晚,所以让你帮他算算,他最少需要几秒才能到公司。数据保证1 11n nn至少有一条路径。

输入格式

第一行两个整数n , m n,mn,m,表示点的个数和边的个数。

接下来m mm行每行两个数字u , v u,vu,v,表示一条u uuv vv的边。

输出格式

一行一个数字,表示到公司的最少秒数。

输入输出样例 #1
输入 #1
4 4 1 1 1 2 2 3 3 4
输出 #1
1
说明/提示

【样例解释】

1 → 1 → 2 → 3 → 4 1 \to 1 \to 2 \to 3 \to 411234,总路径长度为4 44千米,直接使用一次跑路器即可。

【数据范围】

50 % 50\%50%的数据满足最优解路径长度≤ 1000 \leq 10001000

100 % 100\%100%的数据满足2 ≤ n ≤ 50 2\leq n \leq 502n50m ≤ 10 4 m \leq 10 ^ 4m104,最优解路径长度≤ \leqmaxlongint

AC代码

#include<bits/stdc++.h>usingnamespacestd;constintN=60;// 最大节点数constintLOG=62;// 最大对数,2^62足够大intn,m;boolg[N][N][LOG];// g[i][j][k] 表示是否存在从i到j长度为2^k的路径intd[N][N];// d[i][j] 表示从i到j的最短时间(秒数)intmain(){cin>>n>>m;// 初始化memset(g,false,sizeof(g));memset(d,0x3f,sizeof(d));// 初始化为无穷大// 读入边信息for(inti=1;i<=m;i++){intu,v;cin>>u>>v;g[u][v][0]=true;// 基础边,长度为2^0=1d[u][v]=1;// 直接边需要1秒}// 倍增预处理:计算所有2^k可达性for(intk=1;k<LOG;k++){// 处理2^k长度for(intt=1;t<=n;t++){// 中间点for(inti=1;i<=n;i++){// 起点for(intj=1;j<=n;j++){// 终点// 如果存在i->t的2^(k-1)路径和t->j的2^(k-1)路径// 那么存在i->j的2^k路径if(g[i][t][k-1]&&g[t][j][k-1]){g[i][j][k]=true;d[i][j]=1;// 2^k路径只需要1秒}}}}}// Floyd算法计算最短时间for(intk=1;k<=n;k++){// 中间点for(inti=1;i<=n;i++){// 起点for(intj=1;j<=n;j++){// 终点// 更新最短时间d[i][j]=min(d[i][j],d[i][k]+d[k][j]);}}}cout<<d[1][n]<<endl;// 输出从1到n的最短时间return0;}

功能分析

问题理解
  • 跑路器特性:每秒可以跑2 k 2^k2k千米(k kk是任意自然数)
  • 图结构:有向图,每条边长度为1千米
  • 目标:计算从节点1到节点n的最少秒数
算法思想
  1. 倍增预处理

    • g[i][j][k] = true表示存在从i到j长度为2 k 2^k2k的路径
    • 通过动态规划计算:如果存在i→t的2 k − 1 2^{k-1}2k1路径和t→j的2 k − 1 2^{k-1}2k1路径,那么存在i→j的2 k 2^k2k路径
    • 对于这样的路径,设置d[i][j] = 1(因为一次跑路器就能走完)
  2. Floyd算法

    • 在预处理的基础上,计算任意两点间的最短时间
    • 考虑通过中间点的路径组合,找到真正的最短时间
关键点说明
  • 为什么需要两步处理

    • 第一步找出所有可以用1秒到达的点对(距离为2的幂次)
    • 第二步组合这些1秒路径,找到最优的路径序列
  • 时间复杂度

    • 倍增预处理:O(n³ × LOG)
    • Floyd算法:O(n³)
    • 由于n≤50,这在可接受范围内
示例解释

对于样例:

4 4 1 1 1 2 2 3 3 4
  • 存在路径1→1→2→3→4,总长度4千米
  • 4是2的幂次(4=2²),所以一次跑路器即可
  • 输出1

更多系列知识,请查看专栏:《信奥赛C++提高组csp-s知识详解及案例实践》:
https://blog.csdn.net/weixin_66461496/category_13113932.html


各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 7:25:05

【无人机控制】基于LQR 气动特性 + 刚体运动学,建立固定翼飞行器的非线性动力学模型,并在巡航点做小扰动线性化,得到6 阶状态空间模型附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

作者头像 李华
网站建设 2026/3/14 4:35:53

基于51单片机的智能家居环境检测 WIFI 防盗 声光报警

目录 基于51单片机的智能家居环境检测系统WIFI通信模块防盗与声光报警功能硬件组成清单软件设计要点系统扩展功能 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 基于51单片机的智能家居环境检测系统 该系统采用51单片机作为主控芯片…

作者头像 李华
网站建设 2026/3/16 5:17:11

基于51单片机的智能药盒 GSM短信 药量检测 定时吃药

目录 基于51单片机的智能药盒系统概述核心功能模块硬件设计要点软件算法逻辑扩展功能设计应用场景适配 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 基于51单片机的智能药盒系统概述 智能药盒系统以51单片机为核心控制器&#xff0…

作者头像 李华
网站建设 2026/3/13 7:25:06

计算机Java毕设实战-基于springboot的课外培训机构课后服务平台小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/20 20:32:06

巴菲特的财务报表分析:解读平台经济的新指标

巴菲特的财务报表分析&#xff1a;解读平台经济的新指标 关键词&#xff1a;巴菲特、财务报表分析、平台经济、新指标、价值评估 摘要&#xff1a;本文深入探讨了巴菲特的财务报表分析方法在平台经济领域的应用&#xff0c;旨在寻找解读平台经济的新指标。通过介绍背景知识&…

作者头像 李华