news 2026/4/18 3:29:02

GESP认证C++编程真题解析 | P10722 [GESP202406 六级] 二叉树

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP认证C++编程真题解析 | P10722 [GESP202406 六级] 二叉树

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


【题目来源】

洛谷:[P10722 GESP202406 六级] 二叉树 - 洛谷

【题目描述】

小杨有一棵包含n nn个节点的二叉树,且根节点的编号为1 11。这棵二叉树任意一个节点要么是白色,要么是黑色。之后小杨会对这棵二叉树进行q qq次操作,每次小杨会选择一个节点,将以这个节点为根的子树内所有节点的颜色反转,即黑色变成白色,白色变成黑色。

小杨想知道q qq次操作全部完成之后每个节点的颜色。

【输入】

第一行一个正整数n nn,表示二叉树的节点数量。

第二行( n − 1 ) (n-1)(n1)个正整数,第i ii1 ≤ i ≤ n − 1 1\le i\le n-11in1)个数表示编号为( i + 1 ) (i+1)(i+1)的节点的父亲节点编号,数据保证是一棵二叉树。

第三行一个长度为n nn01 \texttt{01}01串,从左到右第i ii1 ≤ i ≤ n 1\le i\le n1in)位如果为0 \texttt{0}0,表示编号为i ii的节点颜色为白色,否则为黑色。

第四行一个正整数q qq,表示操作次数。

接下来q qq行每行一个正整数a i a_iai1 ≤ a i ≤ n 1\le a_i\le n1ain),表示第i ii次操作选择的节点编号。

【输出】

输出一行一个长度为n nn01 \texttt{01}01串,表示q qq次操作全部完成之后每个节点的颜色。从左到右第i ii1 ≤ i ≤ n 1\le i\le n1in) 位如果为0 \texttt{0}0,表示编号为i ii的节点颜色为白色,否则为黑色。

【输入样例】

6 3 1 1 3 4 100101 3 1 3 2

【输出样例】

010000

【算法标签】

《洛谷 P10722 二叉树》 #树形数据结构# #图遍历# #树的遍历# #GESP# #2024#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;// 树结构intn,q;// n: 节点数, q: 操作次数intfa[N];// fa[i]: 节点i的父节点编号intlc[N],rc[N];// lc[i]: 节点i的左儿子编号, rc[i]: 节点i的右儿子编号intcnt[N];// cnt[i]: 节点i被直接操作的次数string s;// s: 每个节点的字符('0'或'1')// 深度优先搜索,将父节点的操作次数传递到子节点// x: 当前节点// f: 父节点的累计操作次数voiddfs(intx,intf){// 当前节点的累计操作次数 = 直接操作次数 + 父节点的累计操作次数cnt[x]+=cnt[f];// 递归处理左子树if(lc[x]){dfs(lc[x],x);}// 递归处理右子树if(rc[x]){dfs(rc[x],x);}}intmain(){// 输入节点数cin>>n;// 构建树结构for(inti=2;i<=n;i++)// 节点1是根节点{intx;cin>>x;// 输入节点i的父节点fa[i]=x;// 记录父节点关系// 将当前节点i作为父节点x的子节点// 先尝试作为左儿子,如果左儿子已有,则作为右儿子if(!lc[x]){lc[x]=i;// 作为左儿子}if(lc[x]!=i&&!rc[x]){rc[x]=i;// 作为右儿子}}// 输入每个节点的字符cin>>s;// 输入操作次数cin>>q;// 在字符串前加空格,使索引从1开始s=' '+s;// 处理每个操作while(q--){intx;cin>>x;// 对节点x进行操作cnt[x]++;// 记录节点x被操作的次数}// 从根节点开始DFS,传递操作次数dfs(1,0);// 根节点1的父节点累计操作为0// 输出最终字符串for(inti=1;i<=n;i++){// 如果节点i的总操作次数是奇数,字符取反if(cnt[i]&1)// cnt[i]是奇数{// 奇数次操作:'0'变'1','1'变'0'cout<<(s[i]=='0');// 如果s[i]是'0',输出1;否则输出0}else// cnt[i]是偶数{// 偶数次操作:字符不变cout<<s[i];}}cout<<endl;return0;}

【运行结果】

6 3 1 1 3 4 100101 3 1 3 2 010000
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 21:27:03

PE42441C-Z,10 MHz至8 GHz宽频带的的射频开关, 现货库存

型号介绍今天我要向大家介绍的是 pSemi 的一款射频开关——PE42441C-Z。 它拥有低插入损耗和高隔离度&#xff0c;这意味着信号在传输过程中几乎没有损失&#xff0c;并且能够有效隔离不同端口之间的信号干扰。它还拥有高线性度&#xff0c;这意味着它能够处理各种强度的信号&a…

作者头像 李华
网站建设 2026/4/16 15:02:42

如何在生产环境稳定运行Open-AutoGLM?资深工程师亲授6大部署要诀

第一章&#xff1a;快速部署Open-AutoGLMOpen-AutoGLM 是一个开源的自动化代码生成框架&#xff0c;基于大语言模型实现从自然语言到可执行代码的转换。其设计目标是简化开发流程&#xff0c;提升编码效率&#xff0c;尤其适用于需要频繁生成脚本或模板代码的场景。环境准备 在…

作者头像 李华
网站建设 2026/4/14 1:50:54

Open-AutoGLM模型部署避坑指南:5个常见错误及解决方案

第一章&#xff1a;智谱开源Open-AutoGLM模型,怎么使用Open-AutoGLM 是智谱AI推出的开源自动化自然语言处理模型&#xff0c;专注于低代码甚至零代码场景下的任务自动建模。该模型支持分类、生成、信息抽取等多种NLP任务&#xff0c;用户可通过简单的接口调用完成复杂建模流程。…

作者头像 李华
网站建设 2026/4/18 2:35:47

Open-AutoGLM核心技术揭秘(虚拟化架构大起底)

第一章&#xff1a;Open-AutoGLM用的是虚拟机吗?Open-AutoGLM 并不依赖传统意义上的虚拟机&#xff08;Virtual Machine&#xff09;来运行其核心服务。它是一个基于容器化架构的自动化大语言模型推理与调度系统&#xff0c;主要依托 Docker 容器和 Kubernetes 编排平台实现资…

作者头像 李华
网站建设 2026/3/20 8:03:11

【Open-AutoGLM高效落地秘籍】:为什么99%的团队都忽略了这4个部署细节?

第一章&#xff1a;Open-AutoGLM部署前的核心认知在将 Open-AutoGLM 引入生产或开发环境之前&#xff0c;深入理解其架构设计与运行机制是确保高效部署和稳定运行的前提。该模型并非传统意义上的静态推理服务&#xff0c;而是一个具备自主任务分解、工具调用与反馈迭代能力的智…

作者头像 李华