news 2026/8/8 13:23:08

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/8/7 4:12:30

Qwen3-Embedding-4B部署卡顿?显存优化实战教程来解决

Qwen3-Embedding-4B部署卡顿&#xff1f;显存优化实战教程来解决 在大模型应用日益普及的今天&#xff0c;向量嵌入&#xff08;Embedding&#xff09;服务作为检索增强生成&#xff08;RAG&#xff09;、语义搜索、推荐系统等场景的核心组件&#xff0c;其性能和稳定性直接影…

作者头像 李华
网站建设 2026/8/1 16:49:58

Elasticsearch可视化工具日志告警配置操作指南

手把手教你用 Kibana 搭建日志告警系统&#xff1a;从零到上线的实战指南你有没有遇到过这种情况&#xff1f;半夜收到同事电话&#xff0c;说服务突然报错&#xff0c;但等你登录系统查看日志时&#xff0c;异常早已过去&#xff0c;现场信息丢失大半。或者每天手动翻看几十个…

作者头像 李华
网站建设 2026/7/29 14:24:26

5分钟部署Qwen3-0.6B,用vLLM一键搭建AI对话API

5分钟部署Qwen3-0.6B&#xff0c;用vLLM一键搭建AI对话API 1. 引言&#xff1a;快速构建本地化AI对话服务 在大模型应用日益普及的今天&#xff0c;如何高效地将开源语言模型集成到实际项目中成为开发者关注的核心问题。Qwen3-0.6B作为阿里巴巴通义千问系列最新发布的轻量级大…

作者头像 李华
网站建设 2026/7/27 13:53:41

cp2102在远程I/O系统中的通信延迟分析与改进

深入拆解 cp2102 通信延迟&#xff1a;从工业轮询卡顿到低延迟优化实战在一次工厂调试中&#xff0c;工程师小李遇到了一个“诡异”的问题&#xff1a;他用一台工控机通过 USB 转串口模块读取 8 个远程 I/O 模块的数据&#xff0c;明明每个设备响应只要几毫秒&#xff0c;但整个…

作者头像 李华
网站建设 2026/7/27 13:53:25

用VibeVoice做虚拟客服对练,训练效率大幅提升

用VibeVoice做虚拟客服对练&#xff0c;训练效率大幅提升 1. 背景与痛点&#xff1a;传统客服培训的瓶颈 在企业服务体系建设中&#xff0c;客服人员的沟通能力训练一直是关键环节。传统的培训方式多依赖于角色扮演、录音回放和人工点评&#xff0c;存在三大核心问题&#xf…

作者头像 李华
网站建设 2026/7/31 9:05:47

YOLOv12目标检测实战:云端GPU 10分钟出结果,成本仅1元

YOLOv12目标检测实战&#xff1a;云端GPU 10分钟出结果&#xff0c;成本仅1元 你是不是也遇到过这样的情况&#xff1f;作为产品经理&#xff0c;想为新App集成一个高效的目标检测功能&#xff0c;听说最新的YOLOv12在速度和精度上都有显著提升&#xff0c;特别适合移动端部署…

作者头像 李华