当前位置: 首页 > news >正文

GESP2025年6月认证C++八级( 第三部分编程题(1)树上旅行)

参考程序:

#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1e5 + 5;  // 最大节点数
const int L = 18;       // 因为最多跳 2^17 ≈ 13w > 1e5,所以倍增表最多 18 层
int n, q;              // n个节点,q次询问
int h[N], nx[N];       // 邻接表:h[u]是u的儿子链表头,nx[i]是i的兄弟
int par[L][N];         // par[i][u]: u向上跳2^i步的祖先编号
int son[L][N];         // son[i][u]: u向下跳2^i步,沿最小编号儿子路径// 构建倍增表
void dfs(int u) {// 计算向上跳的倍增表for (int i = 1; i < L; i++)par[i][u] = par[i - 1][par[i - 1][u]];// 初始化son[0][u]为自身son[0][u] = u;// 遍历u的所有儿子,找到编号最小的那个for (int i = h[u]; i; i = nx[i]) {dfs(i);  // 递归构建子树// 若当前u还没有设置下跳路径,或者i比原来的小,就更新if (son[0][u] == u || i < son[0][u])son[0][u] = i;}// 构建向下跳的倍增表for (int i = 1; i < L; i++)son[i][u] = son[i - 1][son[i - 1][u]];
}// 跳路径:从u向上/下跳step步,go表示跳跃表(par或son)
int move(int go[L][N], int u, int step) {for (int i = 0; i < L; i++)if ((step >> i) & 1)  // step包含2^iu = go[i][u];return u;
}
int main() {scanf("%d%d", &n, &q);// 构建树结构for (int i = 2; i <= n; i++) {scanf("%d", &par[0][i]);        // 读入第i个点的父亲nx[i] = h[par[0][i]];           // 建立邻接表(链式前向星)h[par[0][i]] = i;}par[0][1] = 1;  // 根节点指向自己(防越界)dfs(1);  // 构建倍增数组(上跳和下跳)// 处理每次旅行while (q--) {int s, k;scanf("%d%d", &s, &k);  // 起点s,k步while (k--) {int a;scanf("%d", &a);   // 读入第a步操作if (a < 0)         // 向下走s = move(son, s, -a);else               // 向上走s = move(par, s, a);}printf("%d\n", s);  // 输出最终所在节点}return 0;
}

http://www.lryc.cn/news/607661.html

相关文章:

  • 链表【各种题型+对应LeetCode习题练习】
  • 《C++》STL--list容器详解
  • UnionApplication
  • 江协科技STM32 12-2 BKP备份寄存器RTC实时时钟
  • 【Shell脚本自动化编写——报警邮件,检查磁盘,web服务检测】
  • Windows安装虚拟机遇到内容解码失败
  • python-异常(笔记)
  • Java学习-运算符
  • Java:JWT 从原理到高频面试题解析
  • 【Linux】重生之从零开始学习运维之Mysql
  • Rust在CentOS 6上的移植
  • 2025.8.1
  • 1661. 每台机器的进程平均运行时间
  • 系统开机时自动执行指令
  • 基于python大数据的招聘数据可视化及推荐系统
  • 算法思想之 多源 BFS 问题
  • 【Node.js安装注意事项】-安装路径不能有空格
  • PNP机器人机器人学术年会展示灵巧手动作捕捉方案。
  • MySQL分析步
  • Android签名轮转
  • Conda install安装了一些库,如何撤销操作
  • 第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2022年3月13日真题
  • 外卖“0元购”退场后,即时零售大战才刚开始
  • CORS模块:你的跨域快速通行证 [特殊字符]
  • 【C语言入门级教学】字符指针变量
  • Java 23 新特性解析与代码示例
  • 嵌入式学习日志————TIM输入捕获
  • EasyGBS的两种录像回看
  • 抢占先机,PostgreSQL 中级专家认证的职业跃迁
  • 学习:入门uniapp Vue3组合式API版本(17)