news 2026/4/23 19:15:39

GESP认证C++编程真题解析 | P10725 [GESP202406 八级] 最远点对

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP认证C++编程真题解析 | P10725 [GESP202406 八级] 最远点对

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


【题目来源】

洛谷:[P10725 GESP202406 八级] 最远点对 - 洛谷

【题目描述】

小杨有一棵包含n nn个节点的树,这棵树上的任意一个节点要么是白色,要么是黑色。

小杨想知道相距最远的一对不同颜色节点的距离是多少。

【输入】

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

第二行包含n nn个非负整数a 1 , a 2 , … , a n a_1,a_2,\dots,a_na1,a2,,an(对于所有的1 ≤ i ≤ n 1\le i\le n1in,均有a i a_iai等于 0 或 1),其中如果a i = 0 a_i=0ai=0,则节点i ii的颜色为白色;如果a i = 1 a_i=1ai=1,则节点i ii的颜色为黑色。

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

保证输入的树中存在不同颜色的点。

【输出】

输出一个整数,代表相距最远的一对不同颜色节点的距离。

【输入样例】

5 0 1 0 1 0 1 2 1 3 3 4 3 5

【输出样例】

3

【算法标签】

《洛谷 P10725 最远点对》 #树的遍历# #GESP# #2024#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;constintN=100005,M=N*2;intn;// 节点数inta[N];// a[i]: 节点i的颜色,0或1intcol0[N],col1[N];// col0[i]: 以节点i为根的子树中,距离i最近的0色节点的距离// col1[i]: 以节点i为根的子树中,距离i最近的1色节点的距离intans;// 答案:最长异色路径长度inth[N],e[M],ne[M],w[M],idx;// 邻接表存储树// 添加无向边voidadd(inta,intb,intc){e[idx]=b;// 边的终点w[idx]=c;// 边权,这里都是1ne[idx]=h[a];// 插入到链表头部h[a]=idx;// 更新头指针idx++;// 边编号自增}// 深度优先搜索// u: 当前节点// fa: 父节点voiddfs(intu,intfa){// 初始化当前节点的col0和col1if(a[u]==1){col1[u]=0;// 如果当前节点是1色,距离为0}else{col0[u]=0;// 如果当前节点是0色,距离为0}// 遍历所有邻居节点for(inti=h[u];i!=-1;i=ne[i]){intj=e[i];// 邻居节点if(j==fa)// 如果是父节点,跳过{continue;}// 递归处理子树dfs(j,u);// 关键:更新答案// 如果u是0色,j的子树中有1色节点,形成异色路径if(col0[u]>=0&&col1[j]>=0){ans=max(ans,col1[j]+col0[u]+1);}// 如果u是1色,j的子树中有0色节点,形成异色路径if(col1[u]>=0&&col0[j]>=0){ans=max(ans,col0[j]+col1[u]+1);}// 更新当前节点的col0和col1col1[u]=max(col1[u],col1[j]+1);col0[u]=max(col0[u],col0[j]+1);}}intmain(){// 输入节点数cin>>n;// 初始化邻接表memset(h,-1,sizeof(h));// 输入每个节点的颜色for(inti=1;i<=n;i++){cin>>a[i];// 初始化col0和col1为负无穷col0[i]=-1e9;col1[i]=-1e9;}// 输入n-1条边,构建树for(inti=1;i<n;i++){intu,v;cin>>u>>v;add(u,v,1);// 添加无向边,边权为1add(v,u,1);}// 从节点1开始DFSdfs(1,0);// 输出答案cout<<ans<<endl;return0;}

【运行结果】

5 0 1 0 1 0 1 2 1 3 3 4 3 5 3
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:30:11

十八、使用class分类管理设备

设备的大管家class 使用class对硬件设备进行分类管理class与用户空间守护进程udev/mdev协作&#xff0c;自动创建设备文件 设备驱动模型框图Linux内核启动的过程中会调用classes_init()函数在sysfs文件系统中创建一个名为class的文件夹。我们在驱动中调用class_create()函数&am…

作者头像 李华
网站建设 2026/4/23 10:50:21

【QOwnNotes】安装笔记

一、Windows 直接安装方式 1. 官方安装包 下载地址&#xff1a;https://www.qownnotes.org/installation 安装步骤&#xff1a; 访问官网下载页面选择 Windows 安装包&#xff08;通常是 .exe 或 .msi 格式&#xff09;双击运行安装程序按照向导完成安装在开始菜单或桌面找到快…

作者头像 李华
网站建设 2026/4/23 10:50:19

错过再等十年?Open-AutoGLM即将改变AI开发模式,你准备好了吗?

第一章&#xff1a;错过再等十年&#xff1f;Open-AutoGLM的变革意义Open-AutoGLM 的发布标志着自动化机器学习与大语言模型融合迈入新纪元。它不仅重新定义了模型训练的效率边界&#xff0c;更在开源生态中点燃了一场技术革命。传统AutoML依赖大量人工调参和特征工程&#xff…

作者头像 李华
网站建设 2026/4/23 12:23:58

使用PaddlePaddle镜像快速部署OCR与目标检测应用

使用PaddlePaddle镜像快速部署OCR与目标检测应用 在智能制造、金融票据处理和安防监控等实际场景中&#xff0c;企业对自动化视觉系统的依赖正以前所未有的速度增长。一个典型的挑战是&#xff1a;如何在有限的开发周期内&#xff0c;将高精度的OCR识别与目标检测能力稳定地部署…

作者头像 李华
网站建设 2026/4/23 12:25:33

PaddlePaddle镜像深度测评:中文自然语言处理表现如何?

PaddlePaddle镜像深度测评&#xff1a;中文自然语言处理表现如何&#xff1f; 在当今AI应用快速落地的背景下&#xff0c;开发者面临的最大挑战之一不再是“有没有模型”&#xff0c;而是“能不能跑起来”。尤其是在中文自然语言处理&#xff08;NLP&#xff09;场景下&#xf…

作者头像 李华
网站建设 2026/4/23 10:44:23

Windows系统文件wship6.dll丢失损坏 下载方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华