news 2026/6/12 17:01:47

2025年3月GESP真题及题解(C++七级): 图上移动

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2025年3月GESP真题及题解(C++七级): 图上移动

2025年3月GESP真题及题解(C++七级): 图上移动

题目描述

小 A 有一张包含n nn个结点与m mm条边的无向图,结点以1 , 2 , … , n 1, 2, \dots, n1,2,,n标号。小 A 会从图上选择一个结点作为起点,每一步移动到某个与当前小 A 所在结点相邻的结点。对于每个结点i ii1 ≤ i ≤ n 1 \leq i \leq n1in),小 A 想知道从结点i ii出发恰好移动1 , 2 , … , k 1, 2, \dots, k1,2,,k步之后,小 A 可能会位于哪些结点。由于满足条件的结点可能有很多,你只需要求出这些结点的数量。

输入格式

第一行,三个正整数n , m , k n, m, kn,m,k,分别表示无向图的结点数与边数,最多移动的步数。

接下来m mm行,每行两个正整数u i , v i u_i, v_iui,vi,表示图中的一条连接结点u i u_iuiv i v_ivi的无向边。

输出格式

n nn行,第i ii行 (1 ≤ i ≤ n 1 \leq i \leq n1in) 包含k kk个整数,第j jj个整数 (1 ≤ j ≤ k 1 \leq j \leq k1jk) 表示从结点i ii出发恰好移动j jj步之后可能位置的结点数量。

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

对于20 % 20\%20%的测试点,保证k = 1 k = 1k=1

对于另外20 % 20\%20%的测试点,保证1 ≤ n ≤ 50 , 1 ≤ m ≤ 50 1 \leq n \leq 50, 1 \leq m \leq 501n50,1m50

对于所有测试点,保证1 ≤ n ≤ 500 , 1 ≤ m ≤ 500 , 1 ≤ k ≤ 20 , 1 ≤ u i , v i ≤ n 1 \leq n \leq 500, 1 \leq m \leq 500, 1 \leq k \leq 20, 1 \leq u_i, v_i \leq n1n500,1m500,1k20,1ui,vin

思路分析

本题要求计算从每个结点出发,恰好移动 1 到 k 步后可能到达的不同结点数量。由于 k 较小(≤20),可以采用动态规划方法对每个起点单独计算。

对于每个起点 s:

  • 定义状态dp[j][v]表示从 s 出发恰好 j 步能否到达结点 v。
  • 初始状态:dp[0][s] = true,其余为 false。
  • 状态转移:对于步数 j 从 1 到 k,遍历每条边 (u, v),若dp[j-1][u]为 true,则dp[j][v]置为 true;同理,若dp[j-1][v]为 true,则dp[j][u]置为 true。因为是无向图,每条边可以双向行走。
  • 最终对于每个 j,统计dp[j][v]中 true 的数量即为答案。

时间复杂度:共 n 个起点,每个起点进行 k 轮转移,每轮遍历 m 条边,总复杂度 O(n * k * m),在题目数据范围(n,m ≤ 500, k ≤ 20)下完全可行。

代码实现

#include<iostream>#include<cstring>usingnamespacestd;constintMAXN=505;// 最大结点数constintMAXK=25;// 最大步数+5constintMAXM=505;// 最大边数booldp[MAXK][MAXN];// dp[步数][结点]:从当前起点出发恰好j步能否到达该结点pair<int,int>edges[MAXM];// 存储所有边intmain(){intn,m,k;cin>>n>>m>>k;// 读入边for(inti=0;i<m;i++){intu,v;cin>>u>>v;edges[i]={u,v};// 存为pair方便使用}// 对每个起点分别计算for(intstart=1;start<=n;start++){// 初始化dp数组为falsememset(dp,0,sizeof(dp));// 0步时只能到达起点自身dp[0][start]=true;// 动态规划:计算恰好j步的可达性for(intj=1;j<=k;j++){// 遍历每条边进行转移for(inti=0;i<m;i++){intu=edges[i].first,v=edges[i].second;// 如果上一步能到达u,则这一步可以通过边(u,v)到达vif(dp[j-1][u]){dp[j][v]=true;}// 无向图,反向同理if(dp[j-1][v]){dp[j][u]=true;}}}// 输出结果:对于每个步数j,统计可达结点数量for(intj=1;j<=k;j++){intcnt=0;for(intv=1;v<=n;v++){if(dp[j][v])cnt++;}cout<<cnt;if(j<k)cout<<" ";// 行内空格分隔}cout<<endl;// 换行进入下一个起点}return0;}

功能分析

  1. 输入处理

    • 读取结点数 n、边数 m 和最大步数 k。
    • 存储 m 条无向边。
  2. 核心计算

    • 外层循环遍历每个起点 start(1 到 n)。
    • 对每个起点,使用二维布尔数组 dp 记录可达性。
    • 动态规划过程模拟了所有可能的移动路径(允许重复访问结点和边)。
    • 通过遍历所有边进行状态转移,确保考虑所有可能的移动。
  3. 输出结果

    • 对每个起点,输出 k 个整数,分别表示移动 1 到 k 步后可能位置的数量。
  4. 算法特点

    • 利用 k 较小的条件,采用朴素的动态规划即可高效求解。
    • 每个起点独立计算,逻辑清晰,易于实现。
    • 正确处理无向边和自环(如果存在)的情况。
  5. 复杂度

    • 时间复杂度:O(n * k * m),最大为 500 × 20 × 500 = 5 × 10^6,运行速度快。
    • 空间复杂度:O(k * n + m),主要用于存储 dp 数组和边列表。

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

#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/5/28 19:54:37

高分辨率挑战:Live Avatar 704*384模式实测表现

高分辨率挑战&#xff1a;Live Avatar 704*384模式实测表现 1. 引言&#xff1a;高分辨率数字人生成的现实瓶颈 随着AIGC技术在虚拟数字人领域的深入发展&#xff0c;用户对生成视频质量的要求不断提升。阿里联合高校开源的Live Avatar模型作为当前领先的14B参数级S2V&#x…

作者头像 李华
网站建设 2026/6/10 22:33:08

轻量级可执行文件构建:面向资源受限设备的设计思路

轻量级可执行文件构建&#xff1a;如何让嵌入式固件更小、更快、更灵活你有没有遇到过这种情况&#xff1f;写了一个功能简单的传感器采集程序&#xff0c;编译完却发现生成的固件有好几KB——而芯片上的Flash总共才64KB。等加上通信协议、加密算法和用户界面后&#xff0c;空间…

作者头像 李华
网站建设 2026/5/21 20:34:57

RetinaFace模型解释:预置SHAP环境可视化关键点检测决策依据

RetinaFace模型解释&#xff1a;预置SHAP环境可视化关键点检测决策依据 你是不是也遇到过这样的情况&#xff1f;产品经理拿着一张侧脸照片问&#xff1a;“为什么RetinaFace把鼻子关键点标歪了&#xff1f;”而你翻遍日志、调整参数&#xff0c;却无法给出一个让人信服的“原…

作者头像 李华
网站建设 2026/6/10 21:52:28

二十六、【鸿蒙 NEXT】LazyForeach没有刷新

【前言】 上一章我们介绍了ObservedV2与LazyForeach结合实现动态刷新的效果&#xff0c;这里在上一章代码基础上给出一种场景&#xff0c;虽然LazyForeach中的generateKey变更了&#xff0c;但是列表还是没有刷新的情况。 1、结合Refresh组件实现下拉刷新 我们在展示列表数据…

作者头像 李华
网站建设 2026/6/10 14:31:20

中国核建如何操作

截至2026-01-15&#xff0c;中国核建&#xff08;601611&#xff09;短线技术信号“强力卖出”&#xff0c;但中期基本面&#xff08;核电高景气千亿级新签合同50亿元战投资金&#xff09;仍被多家机构看好&#xff0c;操作可分三档考虑&#xff1a;1. 超短节奏现价17.9元已贴近…

作者头像 李华
网站建设 2026/6/10 15:19:40

科哥出品Voice Sculptor解析:中文指令驱动的多风格语音生成利器

科哥出品Voice Sculptor解析&#xff1a;中文指令驱动的多风格语音生成利器 1. 技术背景与核心价值 近年来&#xff0c;随着深度学习在语音合成领域的持续突破&#xff0c;传统TTS&#xff08;Text-to-Speech&#xff09;系统已逐步向可控化、个性化、情感化方向演进。然而&a…

作者头像 李华