当前位置: 首页 > 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.dtcms.com/a/310295.html

相关文章:

  • 一体化伺服电机在自动焊接设备中的控制转台转动部分应用案例
  • 【文章素材】3dBackgroundBoxes(3D背景盒子组件)项目及文章思路
  • 【PHP 自动加载机制详解】
  • HCIA实验——2.EVE模拟器的安装【完成】
  • iOS企业签名掉签,iOS企业签名掉签了怎么办?
  • 书生浦语第五期L0G1000
  • 【算法】指数滑动滤波器
  • 算法篇----位运算
  • 基于SAMP算法OFDM系统信道估计
  • 学习笔记090——Ubuntu 中 UFW 防火墙的使用
  • 香港正式启动稳定币牌照制度!推动中国的人民币国际化?
  • 本地浏览器设置上网代理服务
  • Linux编程: 10、线程池与初识网络编程
  • 通用障碍物调研
  • Java 大视界 -- Java 大数据机器学习模型在电商产品定价策略优化与市场竞争力提升中的应用(375)
  • 阿里云oss上传文件 普通上传和分片上传方法封装
  • Unity UI的未来之路:从UGUI到UI Toolkit的架构演进与特性剖析(7)
  • 小杰数据结构(four day)——藏器于身,待时而动。
  • PNP机器人机器人学术年会展示灵巧手动作捕捉方案。
  • 【高等数学】第七章 微分方程——第六节 高阶线性微分方程
  • C# StringBuilder类及其使用方法
  • 【LeetCode 热题 100】394. 字符串解码
  • 合并对象 递归注意对象的合并时机
  • 20257月29日-8月2日训练日志
  • Codeforces Round 1040 (Div. 2)(补题)
  • Java函数式编程之【基本数据类型流】
  • Thymeleaf 模板引擎原理
  • 删除MicroGame
  • 设计模式之职责链模式
  • Android 中 Intent 的显式和隐式使用方式