[GESP202406 六级] 二叉树

GESP编程共123题,本题是整站第1421题,已经有人完成了本题,加油!

题目描述

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

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

输入格式

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

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

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

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

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

输出格式

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

输入输出样例

输入 #1

6
3 1 1 3 4
100101
3
1
3
2

输出 #1

010000

说明/提示

样例解释

第一次操作后,节点颜色为:011010

第二次操作后,节点颜色为:000000

第三次操作后,节点颜色为:010000

数据范围

子任务编号 得分 n q 特殊条件
1 20 ≤10^5 ≤1^05 对于所有 i≥2,节点 i 的父亲节点编号为 i−1
2 40 ≤1000 ≤1000  
3 40 ≤10^5 ≤10^5  

对于全部数据,保证有 n,q≤10^5。

别灰心,再试一次!

真题解析

【题目大意】

给定一棵有向树,同时给定q次操作,每次操作将x所在的子树每个节点颜色取反,问q次操作后的每个节点的颜色,数据范围为105.

【考纲知识点】

树上DFS,树形DP

【解题思路】

①比较朴素的思路为建树,每次操作时执行DFS,将操作的结果处理,最终输出每个节点颜色,极端情况下每次操作遍历整棵树的话,复杂度O(nq),只能解决40%的数据。

②考虑到程序只要最终结果,因此中间结果没必要完全求得,取反操作的周期为2,具有奇偶性,因此每次操作X时,将X的位置打个标记,表示其将影响X下方的每个节点翻转一次,当所有操作标记完,执行DFS,从root=1出发,统计到达每个节点X时的标记的数量cnt,如果cnt为奇数,则改点颜色取反,否则保持原来颜色。这样只需要O(n+q)的复杂度。

参考程序

本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。