2024年9月GESP真题及题解(C++七级): 小杨寻宝

2024年9月GESP真题及题解(C++七级): 小杨寻宝

题目描述

小杨有一棵包含n nn个节点的树,树上的一些节点放置有宝物。

小杨可以任意选择一个节点作为起点并在树上移动,但是小杨只能经过每条边至多一次,当小杨经过一条边后,这条边就会消失。小杨每经过一个放置有宝物的节点就会取得该宝物。

小杨想请你帮他判断自己能否成功取得所有宝物。

输入格式

本题单个测试点内有多组测试数据。输入第一行包含一个正整数t tt,代表测试用例组数。
接下来是t tt组测试用例。对于每组测试用例,一共n + 1 n+1n+1行。

第一行包含一个正整数n nn,代表树的节点数。
第二行包含n nn个非负整数a 1 , a 2 , … a n a_1, a_2, \dots a_na1,a2,an,其中如果a i = 1 a_i = 1ai=1,则节点i ii放置有宝物;若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的边。

输出格式

对于每组测试数据,如果小杨能成功取得所有宝物,输出 Yes,否则输出 No。

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

对于第一组测试用例,小杨从节点2 22出发,按照2 − 1 − 3 − 4 2-1-3-42134的顺序即可成功取得所有宝物。

数据规模与约定
子任务编号数据点占比t ttn nn
1 1120 % 20\%20%≤ 10 \leq 1010≤ 5 \leq 55
2 2220 % 20\%20%≤ 10 \leq 1010≤ 10 3 \leq 10^3103
3 3360 % 60\%60%≤ 10 \leq 1010≤ 10 5 \leq 10^5105

对全部的测试点,保证1 ≤ t ≤ 10 1 \leq t \leq 101t101 ≤ n ≤ 10 5 1 \leq n \leq 10^51n1050 ≤ a i ≤ 1 0 \leq a_i \leq 10ai1,且保证树上至少有一个点放置有宝物。

思路分析

问题本质

这道题的核心是判断树中所有宝物节点是否在一条简单路径上。

关键理解
  1. 移动限制:每条边只能走一次,这意味着路径不能有分支,必须是简单路径
  2. 需要遍历所有宝物节点:但路径必须是线性的
  3. 结论:能成功取得所有宝物 ⇔ 所有宝物节点在一条简单路径上
解决方案
  1. 找到宝物节点的直径

    • 任意选择一个宝物节点作为起点
    • 找到距离该节点最远的宝物节点u
    • u出发,找到距离u最远的宝物节点v
    • uv之间的路径就是宝物节点的直径
  2. 检查所有宝物节点是否在路径u-v

    • 对于任意节点i,如果它位于路径u-v上,则满足:
      • dist(u,i) + dist(i,v) = dist(u,v)
    • 因此只需要检查每个宝物节点是否满足这个条件
算法步骤
  1. 建树(邻接表)
  2. 找到任意一个宝物节点作为起点
  3. 两次DFS求宝物节点的直径端点uv
  4. 检查所有宝物节点是否在路径u-v

代码实现

#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;// 最大节点数// 邻接表存储树vector<int>g[N];// a[]: 记录每个节点是否有宝物// d1[]: 记录从节点u到其他节点的距离// d2[]: 记录从节点v到其他节点的距离inta[N],d1[N],d2[N];intn;// 节点数intu,v;// 宝物节点直径的两个端点intmx;// 记录当前搜索中的最远距离/* DFS计算距离 * u 当前节点 * fa 父节点(避免回环) * dist 从起点到当前节点的距离 * d[] 距离数组,记录从起点到每个节点的距离 * * 同时更新最远的宝物节点 */voiddfs(intu,intfa,intdist,intd[]){d[u]=dist;// 记录距离// 如果当前节点有宝物,且距离比当前最远距离更大if(a[u]&&dist>mx){mx=dist;// 更新最远距离v=u;// 记录最远节点(参数v是全局变量,会被修改)}// 遍历所有邻居节点for(intx:g[u]){if(x!=fa){// 避免回到父节点dfs(x,u,dist+1,d);}}}//solve函数:处理单个测试用例voidsolve(){cin>>n;// 初始化:清空邻接表,读取宝物信息for(inti=1;i<=n;i++){cin>>a[i];g[i].clear();}// 建立树的邻接表for(inti=1;i<n;i++){intx,y;cin>>x>>y;g[x].push_back(y);g[y].push_back(x);}// 找到第一个宝物节点作为起点ints=1;while(s<=n&&!a[s])s++;// 题目保证至少有一个宝物节点,所以s一定存在// 第一步:从s出发,找到最远的宝物节点umx=-1;// 初始化最远距离dfs(s,0,0,d1);// 计算从s到所有节点的距离u=v;// v现在是最远的宝物节点// 第二步:从u出发,找到最远的宝物节点v// 此时u-v的路径就是宝物节点的直径mx=-1;dfs(u,0,0,d1);// 重新计算从u到所有节点的距离,记录在d1中intt=v;// v现在是另一个端点,暂存为t// 第三步:从t出发,计算到所有节点的距离,记录在d2中dfs(t,0,0,d2);// 检查所有宝物节点是否在u-t路径上for(inti=1;i<=n;i++){if(a[i]){// 只检查宝物节点// 判断节点i是否在路径u-t上:// 如果dist(u,i) + dist(i,t) == dist(u,t),则i在u-t路径上if(d1[i]+d2[i]!=d1[t]){cout<<"No\n";return;}}}cout<<"Yes\n";}intmain(){// 优化输入输出ios::sync_with_stdio(false);cin.tie(0);intT;// 测试用例组数cin>>T;while(T--){solve();}return0;}

功能分析

核心算法:树直径法判断共线性
  1. 第一次DFS:从任意宝物节点找到最远的宝物节点u
  2. 第二次DFS:从u找到最远的宝物节点v,确定宝物节点的直径
  3. 第三次DFS:计算所有节点到v的距离
  4. 验证:检查每个宝物节点是否在u-v路径上
关键性质
  • 如果所有宝物节点在一条简单路径上,那么这条路径一定是宝物节点形成的"子图"的直径

  • 对于树上的三个点u, i, v,点iu-v路径上当且仅当:

    dist(u,i) + dist(i,v) = dist(u,v)
时间复杂度
  • 每次DFS: O(n)
  • 三次DFS: O(3n) = O(n)
  • 总复杂度: O(t*n),其中t≤10,n≤10 5 10^5105
空间复杂度
  • 邻接表: O(n)
  • 距离数组: O(n)
  • 总复杂度: O(n)

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

#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;}

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

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

相关文章

苏州装修性价比大揭秘!哪家公司才是真王者? - 品牌测评鉴赏家

苏州装修性价比大揭秘!哪家公司才是真王者?一.苏州装修市场现状 在苏州,装修市场可谓是一片繁荣景象,各类装修公司如雨后春笋般涌现,数量众多让人眼花缭乱。据不完全统计,苏州大大小小的装修公司不下数百家 ,从…

HBase与Flink CDC:实时数据同步技术

HBase与Flink CDC:实时数据同步技术 关键词:HBase、Flink CDC、实时数据同步、变更数据捕获、分布式系统、数据集成、增量处理 摘要:本文深入探讨基于HBase与Flink CDC的实时数据同步技术体系。首先解析HBase存储架构与Flink CDC核心原理,通过数学模型论证数据一致性保障机…

大数据环境下空间数据分析的最佳实践

大数据时代空间数据分析&#xff1a;从踩坑到落地的7个最佳实践 引言&#xff1a;你是否被“海量空间数据”卡住了&#xff1f; 做外卖平台的朋友跟我吐槽&#xff1a;“我们有100万骑手的轨迹数据&#xff0c;想分析他们的停留热点&#xff0c;用ArcGIS跑了3天还没出结果&…

学长亲荐10个AI论文网站,继续教育学生轻松搞定论文格式!

学长亲荐10个AI论文网站&#xff0c;继续教育学生轻松搞定论文格式&#xff01; AI 工具如何让论文写作更轻松 在当今信息爆炸的时代&#xff0c;继续教育学生面对论文写作时常常感到压力山大。无论是格式要求、内容逻辑还是语言表达&#xff0c;都可能成为阻碍完成论文的“拦路…

2026年诚信的西山区心理咨询,昆明心理咨询,南市区心理咨询公司行业优质名录 - 品牌鉴赏师

引言在当今社会,心理健康问题日益受到人们的关注,心理咨询行业也随之蓬勃发展。在昆明西山区、南市区等地,心理咨询公司如雨后春笋般涌现。为了帮助消费者在众多的心理咨询公司中挑选出优质、诚信的机构,我们依据国…

微信小程序毕设项目推荐-基于springboot的保护濒危动物公益网站系统公益网站建设、动物保护系统、濒危物种网站【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2024年9月GESP真题及题解(C++七级): 矩阵移动

2024年9月GESP真题及题解(C七级): 矩阵移动 题目描述 小杨有一个 nmn \times mnm 的矩阵&#xff0c;仅包含 01? 三种字符。矩阵的行从上到下编号依次为 1,2,…,n1,2,\dots, n1,2,…,n&#xff0c;列从左到右编号依次为 1,2,…,m1, 2, \dots, m1,2,…,m。小杨开始在矩阵的左上…

全网最全8个AI论文工具,专科生轻松搞定论文格式规范!

全网最全8个AI论文工具&#xff0c;专科生轻松搞定论文格式规范&#xff01; AI 工具的崛起&#xff0c;让论文写作不再难 在当今这个信息爆炸的时代&#xff0c;论文写作已经成为专科生学习生活中不可或缺的一部分。无论是课程论文、毕业论文还是科研报告&#xff0c;都需要严…

CSGO财富导师成了全网通缉犯,整个群都在喊“砍他”

&#x1f4a5; 最近超多“导狗”人设彻底崩塌&#xff01; 被全网人肉通缉&#xff0c;几千人的会员群直接炸锅‼️ “报警&#xff01;砍他&#xff01;”骂声此起彼伏&#xff0c;那叫一个热闹… 这就是我一直不让你们听所谓“博主分析饰品走势”、不让跟风炒饰品的原因&…

亲测好用!10个AI论文平台测评:本科生毕业论文神器推荐

亲测好用&#xff01;10个AI论文平台测评&#xff1a;本科生毕业论文神器推荐 2026年AI论文平台测评&#xff1a;为什么需要这份榜单&#xff1f; 随着人工智能技术的不断发展&#xff0c;越来越多的本科生开始借助AI工具辅助毕业论文写作。然而&#xff0c;面对市场上琳琅满目…

AI应用架构师必知:智能客户AI服务平台的模型部署架构设计

AI应用架构师必知&#xff1a;智能客户AI服务平台的模型部署架构设计 关键词&#xff1a;智能客户AI服务平台、模型部署、架构设计、AI应用架构师、云计算、容器化、模型优化 摘要&#xff1a;本文深入探讨智能客户AI服务平台的模型部署架构设计&#xff0c;旨在为AI应用架构师…

Day 5 Art 01: Flutter 框架下的状态管理哲学 - 为什么 UI = f(State) 是鸿蒙开发的基石?

前言&#xff1a;在混沌中寻找秩序的终极算法 在移动开发漫长的演进史中&#xff0c;开发者始终在与一个幽灵作战——复杂性。当应用从简单的展示页面演变为具备实时交互、多端协同、本地持久化的复杂系统时&#xff0c;逻辑与 UI 之间的连线往往会交织成一张令人绝望的乱麻。…

数字图像处理基础知识(一)

1.数字图像处理处理的是什么呢&#xff0c;处理的就是图像 2.计算机视觉和机器视觉 3.图像的处理包括缺陷检测&#xff0c;目标识别&#xff0c;尺寸测量等。 4.图像的滤波&#xff0c;图像的变换&#xff0c;图像分割 5.数字图像处理基础 6.空间域图像处理 图像的反转 对数变换…

【计算机毕业设计案例】基于springboot的保护濒危动物公益网站濒危动物保护、爱心捐赠、志愿者培训和公益募捐系统(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Day 5 Art 02: Flutter 框架 Provider 模式深度解析 - 依赖注入与响应式监听的工业级方案

前言&#xff1a;在复杂的 Widget 树中搭建“数据高速公路” 随着 Flutter 应用规模的扩大&#xff0c;开发者们普遍会遭遇一个被称为“Props Drilling&#xff08;属性钻取&#xff09;”的工程噩梦&#xff1a;为了让嵌套在底层的一个小组件获取到顶层的用户信息&#xff0c…

全网最全专科生AI论文网站TOP9:毕业论文写作测评

全网最全专科生AI论文网站TOP9&#xff1a;毕业论文写作测评 2026年专科生AI论文写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断发展&#xff0c;越来越多的专科生开始借助AI工具辅助毕业论文的撰写。然而&#xff0c;面对市场上琳琅满目的平台…

STM32F0实战:基于HAL库开发【1.9】

6.1.3 时钟安全 1.时钟安全系统(CSS) 时钟安全系统可以由软件使能,用于监测HSE的工作是否正常。时钟安全系统激活后,时钟监测器将在HSE振荡器启动延迟后被使能,并在HSE时钟关闭后关闭。在时钟监测器工作期间,HSE时钟在发生故障时将被关闭,系统时钟自动切换到HSI振荡器…

无线网络仿真:蓝牙网络仿真_(3).蓝牙网络仿真环境搭建

蓝牙网络仿真环境搭建 在无线网络仿真中&#xff0c;蓝牙网络的仿真环境搭建是一个重要的步骤。本节将详细介绍如何搭建一个蓝牙网络仿真环境&#xff0c;包括选择合适的仿真工具、配置仿真参数、生成仿真场景以及验证仿真结果等关键步骤。通过本节的学习&#xff0c;您将能够掌…

得物Java面试被问:Netty的ByteBuf引用计数和内存释放

一、ByteBuf 内存模型 1. ByteBuf 结构概览 java 复制 下载 /*** ByteBuf 内存层次结构*/ public class ByteBufMemoryModel {/*** ByteBuf 的两种主要类型&#xff1a;* 1. Heap Buffer&#xff08;堆缓冲区&#xff09;* - 存储在 JVM 堆内存* - 快速分配和释放* …

小程序毕设选题推荐:基于springboot的公益动物平台、保护濒危系统保护濒危动物公益网站系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…