题意

一颗 \(n\) 节点的二叉树,每个节点非黑即白,给你 \(Q\) 次操作,每次给你一个 \(u\),把 \(u\) 的子树内所有节点颜色反转,问最终每个节点的颜色。

分析

看到数据范围,首先把操作离线。

容易发现如果一个节点重复操作奇数次,等效于操作一次,如果重复操作偶数次,等效于没操作。所以我们可以先把这 \(Q\) 次操作用桶存一下,分别判断操作次数的奇偶性,根据上面的分析,可以同时用另一个桶表示该节点是否被操作。

然后从 \(1\) 号节点开始遍历,因为一个节点的情况只会受其祖先的影响,所以同时用 \(sum\) 记录当前节点的祖先的总操作数,根据奇偶判断当前节点的最终情况,最后输出即可。

一个小细节,每个节点的情况是以字符串形式读入,读入的时候不要读成数字。

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
int w=1,s=0;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)){s=s*10+(ch-'0');ch=getchar();}
return w*s;
}
const int mod=1e9+7;
const int maxn=1e6+10;
int n,Q;
vector<int> G[maxn];
int d[maxn];
int x[maxn],mp[maxn],y[maxn],tot;
bool f[maxn];
void dfs(int x,int fa,int sum)
{
int v=0;
if(y[x])v=1;
if((sum+v)&1)f[x]=1;
for(auto y : G[x])
{
if(y==fa)continue;
dfs(y,x,sum+v);
}
}
signed main()
{
cin>>n;
for(int i=2;i<=n;i++)
{
int x=read();
G[x].push_back(i);
G[i].push_back(x);
}
for(int i=1;i<=n;i++)
{
char x;cin>>x;
d[i]=x-'0';
}
Q=read();
for(int i=1;i<=Q;i++)x[i]=read(),mp[x[i]]++;
for(int i=1;i<=Q;i++)if(mp[x[i]]&1)y[x[i]]=1;
dfs(1,0,0);
for(int i=1;i<=n;i++)cout<<(f[i]?d[i]^1:d[i]);
return 0;
}

题解:P10722 [GESP202406 六级] 二叉树的更多相关文章

  1. 题解 P1305 【新二叉树】

    好像没有人搞\(\color{green}map\)反映,没有人用\(\color{green}map\)反映搞并查集! \(\color{green}map\)第一个好处是作为一个数组,可以开很大! ...

  2. poj2255 (二叉树遍历)

    poj2255 二叉树遍历 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Descripti ...

  3. LeetCode重建二叉树系列问题总结

    二叉树天然的递归特性,使得我们可以使用递归算法对二叉树进行遍历和重建.之前已经写过LeetCode二叉树的前序.中序.后序遍历(递归实现),那么本文将进行二叉树的重建,经过对比,会发现二者有着许多相似 ...

  4. LeetCode二叉树的前序、中序、后序遍历(递归实现)

    本文用递归算法实现二叉树的前序.中序和后序遍历,提供Java版的基本模板,在模板上稍作修改,即可解决LeetCode144. Binary Tree Preorder Traversal(二叉树前序遍 ...

  5. 剑指 Offer 34. 二叉树中和为某一值的路径 + 记录所有路径

    剑指 Offer 34. 二叉树中和为某一值的路径 Offer_34 题目详情 题解分析 本题是二叉树相关的题目,但是又和路径记录相关. 在记录路径时,可以使用一个栈来存储一条符合的路径,在回溯时将进 ...

  6. Codevs1378选课[树形DP|两种做法(多叉转二叉|树形DP+分组背包)---(▼皿▼#)----^___^]

    题目描述 Description 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修 ...

  7. 洛谷P2014 选课 (树形dp)

    10月1日更新.题目:在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分 ...

  8. 102. Binary Tree Level Order Traversal

    题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...

  9. 选课 ( dp 树形dp 动态规划 树规)

    和某篇随笔重了?!!?!?!?!?!?不管了留着吧 题目: 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之 ...

  10. Leetcode 515. 在每个树行中找最大值

    题目链接 https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/description/ 题目描述 您需要在二叉树的 ...

随机推荐

  1. 推荐几款卓越的 .NET 开源搜索组件

    前言 在当今日益数据化的世界中,信息的检索和搜索功能对于各种应用来说变得至关重要. 无论是电子商务网站.企业资源规划系统.还是内容管理系统,高效的搜索功能都是提升用户体验.促进业务发展的关键. 因此, ...

  2. Asp-Net-Core开发笔记:使用原生的接口限流功能

    前言 之前介绍过使用 AspNetCoreRateLimit 组件来实现接口限流 从 .Net7 开始,AspNetCore 开始内置限流组件,当时我们的项目还在 .Net6 所以只能用第三方的 现在 ...

  3. LLVM技术在GaussDB等数据库中的应用

    本文分享自华为云社区<[GaussTech第3期]LLVM技术在GaussDB等数据库中的应用>,作者:GaussDB 数据库. Hi,别急! 让技术触达每一个角落,赋能更多的人,Gaus ...

  4. 发现XWPFDocument写入Word文档时的小BUG:两天的探索与解决之旅

    引言 最近在使用XWPFDocument生成Word文档时,遇到一个错误:"未将对象引用设置到对象的实例".这个平常很容易找到原因的问题却困扰了我两天,最终发现问题出在设置段落时赋 ...

  5. 燕千云 YQCloud 数智化业务服务管理平台发布1.11版本

    2022年3月25日,燕千云 YQCloud 数智化业务服务管理平台发布1.11版本.新增客户服务管理模块.优化IT服务管理功能.增强燕千云与其他平台的集成能力.支持更多的业务服务场景.全面提升企业数 ...

  6. StringUtils.join()方法使用

    * StringUtils.join()方法使用 打印输出: * 使用 StringBuilder 进行拼接:张三,李四,王五 * 使用 StringUtils.join 进行拼接:张三,李四,王五 ...

  7. 解析Html Canvas的卓越性能与高效渲染策略

    一.什么是Canvas 想必学习前端的同学们对Canvas 都不陌生,它是 HTML5 新增的"画布"元素,可以使用JavaScript来绘制图形. Canvas元素是在HTML5 ...

  8. 你不知道的 CSS 之包含块

    你不知道的 CSS 之包含块 一说到 CSS 盒模型,这是很多小伙伴耳熟能详的知识,甚至有的小伙伴还能说出 border-box 和 content-box 这两种盒模型的区别. 但是一说到 CSS ...

  9. golang模拟键盘输入字符串

    介绍 仅供学习使用哈,不要用来开gua. 代码仓库:https://github.com/GuoFlight/gkeybd (本人仓库,欢迎留言) 注意事项 只支持英文 使用前请切换到英文输入法.因为 ...

  10. 什么是spring,它能够做什么?

    1.什么是SpringSpring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情. ...