gesp(C++六级)(10)洛谷:P10722:[GESP202406 六级] 二叉树

news2025/4/22 15:49:07

gesp(C++六级)(10)洛谷:P10722:[GESP202406 六级] 二叉树

在这里插入图片描述

题目描述

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

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

输入格式

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

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

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

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

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

输出格式

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

样例 #1

样例输入 #1

6
3 1 1 3 4
100101
3
1
3
2

样例输出 #1

010000

提示

样例解释

第一次操作后,节点颜色为: 011010 \texttt{011010} 011010

第二次操作后,节点颜色为: 000000 \texttt{000000} 000000

第三次操作后,节点颜色为: 010000 \texttt{010000} 010000

数据范围
子任务编号得分 n n n q q q特殊条件
1 1 1 20 20 20 ≤ 1 0 5 \le 10^5 105 ≤ 1 0 5 \le 10^5 105对于所有 i ≥ 2 i\ge 2 i2,节点 i i i 的父亲节点编号为 i − 1 i-1 i1
2 2 2 40 40 40 ≤ 1000 \le 1000 1000 ≤ 1000 \le 1000 1000
3 3 3 40 40 40 ≤ 1 0 5 \le 10^5 105 ≤ 1 0 5 \le 10^5 105

对于全部数据,保证有 n , q ≤ 1 0 5 n,q\le 10^5 n,q105

AC代码(100分)

#include<bits/stdc++.h>
using namespace std;
/*思路: 
	计算每个节点的操作次数(子节点的反转次数=父节点的反转次数+自身的反转次数) 
	如果操作次数为偶数,则颜色不变
	如果操作次数为奇数,则颜色反转	 
*/
const int N=1e5+10;
int n,x,q,sum[N],ans[N];
vector<int> v[N];//v[i]存i的所有孩子
char s[N]; 
//dfs函数
void dfs(int x){//计算节点x的答案,然后遍历节点x的所有子节点 
	ans[x]=s[x]-'0';//将节点x的初始状态从字符转化为数字,存到答案数组中 
	if(sum[x]%2==1) ans[x]=1-ans[x];//奇数次反转,偶数次不反转
	for(int i=0;i<v[x].size();i++){//遍历x的所有孩子 
		int z=v[x][i];//子节点 
		sum[z]+=sum[x];//子节点的反转次数=父节点的反转次数+自身的反转次数 
		dfs(z);//深搜子节点 
	} 
} 
int main(){
	cin>>n;
	for(int i=2;i<=n;i++){
		cin>>x;
		v[x].push_back(i);//x是i的父节点 
	} 
	for(int i=1;i<=n;i++) cin>>s[i];//输入字符串 
	cin>>q;//输入操作次数 
	for(int i=1;i<=q;i++){
		int a; 
		cin>>a;
		sum[a]++;//计算每个节点作为父节点的操作次数 
	}
	dfs(1);//1是根节点 
	for(int i=1;i<=n;i++) cout<<ans[i];
	return 0;
}

文末彩蛋:

点击王老师青少年编程主页有更多精彩内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2291559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

w186格障碍诊断系统spring boot设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

Android Studio 正式版 10 周年回顾,承载 Androider 的峥嵘十年

Android Studio 1.0 宣发于 2014 年 12 月&#xff0c;而现在时间来到 2025 &#xff0c;不知不觉间 Android Studio 已经陪伴 Androider 走过十年历程。 Android Studio 10 周年&#xff0c;也代表着了我的职业生涯也超十年&#xff0c;现在回想起来依然觉得「唏嘘」&#xff…

4 Hadoop 面试真题

4 Hadoop 面试真题 1. Apache Hadoop 3.0.02. HDFS 3.x 数据存储新特性-纠删码Hadoop面试真题 1. Apache Hadoop 3.0.0 Apache Hadoop 3.0.0在以前的主要发行版本&#xff08;hadoop-2.x&#xff09;上进行了许多重大改进。 最低要求的Java版本从Java 7增加到Java 8 现在&…

25寒假算法刷题 | Day1 | LeetCode 240. 搜索二维矩阵 II,148. 排序链表

目录 240. 搜索二维矩阵 II题目描述题解 148. 排序链表题目描述题解 240. 搜索二维矩阵 II 点此跳转题目链接 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到…

何谓共赢?

A和B是人或组织&#xff0c;他们怎样的合作才是共赢呢&#xff1f; 形态1:A提供自己的身份证等个人信息&#xff0c;B用来作贷款等一些事务&#xff0c;A每月得到一笔钱。 A的风险远大于收益&#xff0c;或者B从事的是非法行为&#xff1b; 形态2:A单方面提前终止了与B的合作…

Kanass基础教程-创建项目

Kanass是一款国产开源免费的项目管理工具&#xff0c;工具简洁易用&#xff0c;开源免费&#xff0c;之前介绍过kanass的一些产品简介及安装配置方法&#xff0c;本文就从如何创建第一个项目来开始kanass上手之旅吧。 1. 创建项目 点击项目->项目添加 按钮进入项目添加页面…

实验9 JSP访问数据库(二)

实验9 JSP访问数据库&#xff08;二&#xff09; 目的&#xff1a; 1、熟悉JDBC的数据库访问模式。 2、掌握预处理语句的使用 实验要求&#xff1a; 1、使用Tomcat作为Web服务器 2、通过JDBC访问数据库&#xff0c;实现增删改查功能的实现 3、要求提交实验报告&#xff0c;将代…

单片机基础模块学习——DS1302时钟芯片

一、DS1302时钟简介 1.与定时器对比 DS1302时钟也称为RTC时钟(Real Time Clock,实时时钟),说到时钟,可能会想到定时器,下表来简单说明一下两者的区别。 定时器(Timer)实时时钟(RTC)精度高,可达微秒级精度较低,多为秒级计时范围短计时范围长2.开发板所在位置 下面方框里…

Vue+Echarts 实现青岛自定义样式地图

一、效果 二、代码 <template><div class"chart-box"><chart ref"chartQingdao" style"width: 100%; height: 100%;" :options"options" autoresize></chart></div> </template> <script> …

FIR滤波器:窗函数法

一、FIR滤波器基础 FIR&#xff08;有限脉冲响应&#xff09;滤波器的三大特点&#xff1a; 绝对稳定&#xff1a;没有反馈回路&#xff0c;不会出现失控振荡 线性相位&#xff1a;信号通过后波形不失真 直观设计&#xff1a;通过窗函数法、频率采样法等方法实现 二、窗函…

【AI】探索自然语言处理(NLP):从基础到前沿技术及代码实践

Hi &#xff01; 云边有个稻草人-CSDN博客 必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。 目录 引言 1. 什么是自然语言处理&#xff08;NLP&#xff09;&#xff1f; 2. NLP的基础技术 2.1 词袋模型&#xff08;Bag-of-Words&#xff0c;BoW&#xff…

力扣动态规划-18【算法学习day.112】

前言 ###我做这类文章一个重要的目的还是记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&#xff01;&#xff01;&#xff01; 习题 1.下降路径最小和 题目链接:931. …

DBASE DBF数据库文件解析

基于Java实现DBase DBF文件的解析和显示 JDK19编译运行&#xff0c;实现了数据库字段和数据解析显示。 首先解析数据库文件头代码 byte bytes[] Files.readAllBytes(Paths.get(file));BinaryBufferArray bis new BinaryBufferArray(bytes);DBF dbf new DBF();dbf.VersionN…

【ESP32】ESP-IDF开发 | WiFi开发 | UDP用户数据报协议 + UDP客户端和服务器例程

1. 简介 UDP协议&#xff08;User Datagram Protocol&#xff09;&#xff0c;全称用户数据报协议&#xff0c;它是一种面向非连接的协议&#xff0c;面向非连接指的是在正式通信前不必与对方先建立连接&#xff0c; 不管对方状态就直接发送。至于对方是否可以接收到这些数据内…

tiktok 国际版抖抖♬♬ X-Bogus参数算法逆向分析

加密请求参数得到乱码&#xff0c;最终得到X-Bogus

C++ Primer 命名空间的using声明

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

c语言(关键字)

前言&#xff1a; 感谢b站鹏哥c语言 内容&#xff1a; 栈区&#xff08;存放局部变量&#xff09; 堆区 静态区&#xff08;存放静态变量&#xff09; rigister关键字 寄存器&#xff0c;cpu优先从寄存器里边读取数据 #include <stdio.h>//typedef&#xff0c;类型…

ARM内核:嵌入式时代的核心引擎

引言 在当今智能设备无处不在的时代&#xff0c;ARM&#xff08;Advanced RISC Machines&#xff09;处理器凭借其高性能、低功耗的特性&#xff0c;成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集&#xff08;RISC&#xff09;的典范&#xff0c;ARM核…

Airflow:选择合适执行器扩展任务执行

Apache Airflow是面向开发人员使用的&#xff0c;以编程方式编写、调度和监控的数据流程平台。可伸缩性是其关键特性之一&#xff0c;Airflow支持使用不同的执行器来执行任务。在本文中&#xff0c;我们将深入探讨如何利用这些执行器在Airflow中有效地扩展任务执行。 理解Airfl…

CoRAG 来自微软与人大的创新RAG框架技术

微软与人大合作开发的CoRAG(Chain-of-Retrieval Augmented Generation)是一种创新的检索增强生成(RAG)框架,旨在通过模拟人类思考方式来提升大语言模型(LLM)在复杂问题上的推理和回答能力。以下是对CoRAG的深度介绍: 1. CoRAG的核心理念 CoRAG的核心思想是通过动态调…