news 2026/5/26 21:21:22

2024年6月GESP真题及题解(C++七级): 黑白翻转

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2024年6月GESP真题及题解(C++七级): 黑白翻转

2024年6月GESP真题及题解(C++七级): 黑白翻转

题目描述

小杨有一棵包含n nn个节点的树,这棵树上的任意一个节点要么是白色,要么是黑色。小杨认为一棵树是美丽树当且仅当在删除所有白色节点之后,剩余节点仍然组成一棵树。

小杨每次操作可以选择一个白色节点将它的颜色变为黑色,他想知道自己最少要执行多少次操作可以使得这棵树变为美丽树。

输入格式

第一行包含一个正整数n nn,代表树的节点数。

第二行包含n nn个非负整数a 1 , a 2 , … , a n a_1,a_2,\ldots,a_na1,a2,,an,其中如果a i = 0 a_i=0ai=0,则节点i ii的颜色为白色,否则为黑色。

之后n − 1 n-1n1行,每行包含两个正整数x i , y i x_i,y_ixi,yi,代表存在一条连接节点x i x_ixiy i y_iyi的边。

输出格式

输出一个整数,代表最少执行的操作次数。

输入输出样例 1
输入 1
5 0 1 0 1 0 1 2 1 3 3 4 3 5
输出 1
2
说明/提示
样例解释

将节点1 113 33变为黑色即可使这棵树变为美丽树,此时删除白色节点5 55,剩余黑色节点仍然组成一棵树。

数据范围
子任务编号数据点占比n nna i a_iai特殊条件
1 1130 % 30\%30%≤ 10 5 \leq 10^51050 ≤ a i ≤ 1 0\leq a_i\leq 10ai1树的形态为一条链
2 2230 % 30\%30%≤ 10 5 \leq 10^51050 ≤ a i ≤ 1 0\leq a_i\leq 10ai1只有两个节点颜色为黑色
3 3340 % 40\%40%≤ 10 5 \leq 10^51050 ≤ a i ≤ 1 0\leq a_i\leq 10ai1

对于全部数据,保证有1 ≤ n ≤ 10 5 1\leq n\leq 10^51n1050 ≤ a i ≤ 1 0\leq a_i\leq 10ai1

思路分析

算法思路
  1. 问题转化:美丽树要求删除所有白色节点后,剩余黑色节点仍构成一棵树,即所有黑色节点必须连通。通过将白色节点变为黑色来连接黑色节点,需要找到最少的白色节点数,使得所有黑色节点连通。
  2. 核心观察:从任意一个黑色节点(如第一个黑色节点)作为根进行DFS,计算每个节点的子树中黑色节点的数量。若一个节点的子树中包含黑色节点,则该节点必须保留(如果是白色则需要变为黑色),否则删除该节点不会影响黑色节点的连通性。
  3. 计算最少操作:统计所有子树中包含黑色节点的节点数,减去初始黑色节点数,即为需要将白色变为黑色的节点数(最少操作次数)。
代码流程
  • 初始化:读入节点颜色,记录黑色节点数并选择第一个黑色节点作为根。
  • 建图:读入边,构建无向树。
  • DFS计算:从根节点开始DFS,后序遍历累加子树中黑色节点数到父节点,使vis[i]最终表示以i为根的子树中黑色节点的总数。
  • 统计结果:遍历所有节点,若vis[i] > 0则说明该节点的子树中有黑色节点,计数一次。最终ans为所有此类节点数,减去初始黑色节点数num1,得到需要操作的白色节点数。
时间复杂度
  • DFS遍历所有节点和边,时间复杂度为O(n)。
  • 空间复杂度为O(n),用于存储树和图。

代码实现

#include<bits/stdc++.h>usingnamespacestd;constintN=200010;// 定义最大节点数,开两倍以防无向边存储intn,a,b,ans,num,root;// n:节点数,a,b:临时边变量,ans:统计结果,num1:黑色节点数量,root:选定的根节点(第一个黑色节点)intvis[N];// vis[i]:初始表示节点i的颜色(黑色为1,白色为0),DFS后表示以i为根的子树中黑色节点的总数vector<int>e[N];// 邻接表存储树的边// 深度优先搜索,计算每个节点的子树中黑色节点数量// u: 当前节点,f: 父节点voiddfs(intu,intf){// 遍历当前节点的所有邻居for(intv:e[u]){if(v==f)continue;// 跳过父节点,避免回环dfs(v,u);// 递归处理子节点vis[u]+=vis[v];// 将子节点的黑色节点数累加到当前节点}return;}intmain(){// 读入节点数scanf("%d",&n);intc;// 读入每个节点的颜色,并初始化vis数组for(inti=1;i<=n;i++){scanf("%d",&c);if(c==1){// 如果节点是黑色vis[i]=1;// 标记该节点为黑色(计数1)num++;// 黑色节点计数加一if(num==1)root=i;// 记录第一个黑色节点作为根节点}// 白色节点vis[i]保持为0}// 读入n-1条边,构建树的无向图for(inti=1;i<n;i++){scanf("%d%d",&a,&b);e[a].push_back(b);e[b].push_back(a);}// 从根节点(第一个黑色节点)开始DFS,计算每个节点的子树中黑色节点数量dfs(root,0);// 统计所有子树中包含黑色节点的节点数(即vis[i] > 0的节点)for(inti=1;i<=n;i++)ans+=bool(vis[i]);// 如果vis[i] > 0则加1,否则加0// 输出最少操作次数:需要变黑的白色节点数 = 包含黑色节点的节点数 - 初始黑色节点数printf("%d\n",ans-num);return0;}

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 11:16:19

Z-Image-Turbo快速上手:5步完成AI图像生成

Z-Image-Turbo快速上手&#xff1a;5步完成AI图像生成 1. 环境准备与项目部署 在开始使用Z-Image-Turbo之前&#xff0c;确保本地开发环境满足基本运行条件。该模型基于PyTorch和DiffSynth框架构建&#xff0c;依赖GPU加速以实现高效图像生成。 1.1 系统与硬件要求 项目推荐…

作者头像 李华
网站建设 2026/5/1 9:54:39

PCB设计入门:走线宽度与电流匹配核心要点

PCB设计避坑指南&#xff1a;走线宽度与电流匹配的硬核实战解析你有没有遇到过这样的情况&#xff1f;电路原理图明明没问题&#xff0c;元器件选型也合理&#xff0c;可一上电&#xff0c;PCB上的电源走线就开始“冒烟”——不是真的起火&#xff0c;而是局部温升剧烈、铜箔发…

作者头像 李华
网站建设 2026/5/23 15:20:54

刷题日记-------二叉树层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。示例 1&#xff1a;输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&#xff1a;输入&#…

作者头像 李华
网站建设 2026/5/13 4:11:13

GPEN推理耗时长?CUDA 12.4加速性能实测报告

GPEN推理耗时长&#xff1f;CUDA 12.4加速性能实测报告 在人像修复与增强领域&#xff0c;GPEN&#xff08;GAN-Prior based Enhancement Network&#xff09;因其出色的细节恢复能力和自然的纹理生成效果&#xff0c;被广泛应用于老照片修复、低清图像增强等场景。然而&#…

作者头像 李华
网站建设 2026/5/10 17:50:22

ms-swift量化导出教程:4-bit AWQ模型压缩实战

ms-swift量化导出教程&#xff1a;4-bit AWQ模型压缩实战 在大模型部署场景中&#xff0c;显存占用和推理延迟是制约生产落地的核心瓶颈。随着模型参数规模不断攀升&#xff0c;如何在保持性能的同时降低资源消耗成为工程实践中的关键挑战。量化技术作为模型压缩的重要手段&am…

作者头像 李华
网站建设 2026/5/19 4:25:17

摄影后期新玩法:用BSHM镜像实现专业级人像抠图

摄影后期新玩法&#xff1a;用BSHM镜像实现专业级人像抠图 1. 引言 1.1 人像抠图的技术演进与现实挑战 在数字摄影和视觉内容创作日益普及的今天&#xff0c;人像抠图已成为图像编辑、视频直播、虚拟背景替换等场景中的核心技术。传统方法依赖绿幕拍摄配合色度键控&#xff…

作者头像 李华