news 2026/4/23 12:43:06

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/23 10:13:45

国外研究文献网站使用指南:高效检索与获取学术资源的实用方法

生成式人工智能的浪潮正引发各领域的颠覆性变革&#xff0c;在学术研究这一知识生产的前沿阵地&#xff0c;其影响尤为显著。文献检索作为科研工作的基石&#xff0c;在AI技术的赋能下各大学术数据库已实现智能化升级。小编特别策划"AI科研导航"系列专题&#xff0c;…

作者头像 李华
网站建设 2026/4/23 10:12:32

【AI自动化新纪元】:智谱Open-AutoGLM GitHub源码解读与实战应用

第一章&#xff1a;智谱Open-AutoGLM项目概述智谱AI推出的Open-AutoGLM是一个面向自动化文本生成任务的开源框架&#xff0c;旨在降低大模型应用开发门槛&#xff0c;提升从数据准备到模型部署的全流程效率。该框架基于GLM系列大语言模型构建&#xff0c;支持自然语言理解、文本…

作者头像 李华
网站建设 2026/4/23 14:43:34

收藏!程序员转行大模型实战指南:用现有技术栈快速破局

大模型技术的迅猛发展&#xff0c;不仅颠覆了传统技术服务模式&#xff0c;更给程序员群体开辟了全新的职业赛道。如今&#xff0c;无论是深耕多年的后端老兵、寻求突破的前端开发者&#xff0c;还是专注数据领域的工程师&#xff0c;都在思考如何借助大模型浪潮实现职业进阶&a…

作者头像 李华
网站建设 2026/4/23 11:34:38

Open-AutoGLM是基于虚拟机的吗?99%的人都误解了它的运行机制

第一章&#xff1a;Open-AutoGLM用的是虚拟机吗?Open-AutoGLM 并不依赖传统意义上的虚拟机&#xff08;Virtual Machine&#xff09;来运行其核心功能。它是一个基于大语言模型的自动化代码生成与推理框架&#xff0c;通常部署在容器化环境或物理服务器上&#xff0c;利用 Doc…

作者头像 李华
网站建设 2026/4/22 20:51:01

python大学生班级事务管理系统_9809i--论文_pycharm django vue flask

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发项目效果实现截图 同行可拿货,招校园代理 python大学生班级事务管理系统_9809i–论文_pycharm django v…

作者头像 李华