news 2026/6/10 17:18:54

AcWing 846:树的重心 ← 类似“东方博宜OJ 2190:树的重心”代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AcWing 846:树的重心 ← 类似“东方博宜OJ 2190:树的重心”代码

【题目来源】
https://www.acwing.com/problem/content/848/

【问题描述】
给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。
请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。
重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。

【输入格式】
第一行包含整数 n,表示树的结点数。
接下来 n−1 行,每行包含两个整数 a 和 b,表示点 a 和点 b 之间存在一条边。

【输出格式】
输出一个整数 m,表示将重心删除后,剩余各个连通块中点数的最大值。

【数据范围】
1≤n≤10^5

【输入样例】
9
1 2
1 7
1 4
2 8
2 5
4 3
3 9
4 6

【输出样例】
4

【算法分析】
● 链式前向星:https://blog.csdn.net/hnjzsyjyj/article/details/139369904


【算法代码:链式前向星
本文代码与“东方博宜OJ 2190:树的重心”代码的差别,仅在于最后一部分的循环内容不同。
详见:https://blog.csdn.net/hnjzsyjyj/article/details/155821553

#include <bits/stdc++.h> using namespace std; const int N=1e5+5; const int M=N<<1; int h[N],e[M],ne[M],idx; int pre[N],cnt[N]; int rem[N]; //remnant int n; void add(int a,int b) { e[idx]=b,ne[idx]=h[a],h[a]=idx++; } int dfs(int u,int fa) { cnt[u]=1; pre[u]=fa; for(int i=h[u]; i!=-1; i=ne[i]) { int j=e[i]; if(j!=fa) cnt[u]+=dfs(j,u); } return cnt[u]; } int main() { memset(h,-1,sizeof h); cin>>n; for(int i=1; i<n; i++) { int a,b; cin>>a>>b; add(a,b),add(b,a); } dfs(1,-1); int imin=INT_MAX; for(int u=1; u<=n; u++) { rem[u]=n-cnt[u]; for(int i=h[u]; i!=-1; i=ne[i]) { int j=e[i]; if(pre[j]==u) { rem[u]=max(rem[u],cnt[j]); } } imin=min(imin,rem[u]); } int imax=INT_MIN; for(int u=1; u<=n; u++) { if(imin==rem[u]) { int t=0; for(int i=h[u]; i!=-1; i=ne[i]) { int j=e[i]; if(pre[j]==u) { t=max(t,cnt[j]); } } t=max(t,n-cnt[u]); imax=max(imax,t); } } cout<<imax<<endl; return 0; } /* in: 10 1 2 1 3 4 2 4 5 3 6 7 6 8 6 9 6 7 10 out: 5 */





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/155821553
https://www.acwing.com/solution/content/287387/
https://blog.csdn.net/hnjzsyjyj/article/details/139369904
https://blog.csdn.net/hnjzsyjyj/article/details/108655516
https://blog.csdn.net/qq_47783057/article/details/116195481
https://www.acwing.com/solution/content/13513/
https://www.acwing.com/solution/content/4917/

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

专业鼠标性能测试利器:MouseTester全方位实战评测

专业鼠标性能测试利器&#xff1a;MouseTester全方位实战评测 【免费下载链接】MouseTester 项目地址: https://gitcode.com/gh_mirrors/mo/MouseTester 在追求极致操作体验的数字时代&#xff0c;鼠标性能测试已成为游戏玩家、设计师和办公用户的关键需求。MouseTeste…

作者头像 李华
网站建设 2026/6/10 12:18:51

Driver.js 1.x 完全重构迁移指南:从旧版平滑升级的实战教程

Driver.js 1.x 完全重构迁移指南&#xff1a;从旧版平滑升级的实战教程 【免费下载链接】driver.js driver.js - 一个轻量级、无依赖的纯 JavaScript 库&#xff0c;用于控制用户在网页上的焦点移动&#xff0c;适用于需要实现网页交互和用户指引的前端开发者。 项目地址: ht…

作者头像 李华
网站建设 2026/6/10 12:21:22

3步掌握AI简历解析:智能实体识别技术如何提升招聘效率5倍

3步掌握AI简历解析&#xff1a;智能实体识别技术如何提升招聘效率5倍 【免费下载链接】Resume-Matcher Resume Matcher is an open source, free tool to improve your resume. It works by using language models to compare and rank resumes with job descriptions. 项目…

作者头像 李华
网站建设 2026/6/10 0:11:30

FreeCAD绘图尺寸标注插件:5分钟掌握专业标注技巧

FreeCAD绘图尺寸标注插件&#xff1a;5分钟掌握专业标注技巧 【免费下载链接】FreeCAD_drawing_dimensioning Drawing dimensioning workbench for FreeCAD v0.16 项目地址: https://gitcode.com/gh_mirrors/fr/FreeCAD_drawing_dimensioning 还在为FreeCAD中的精确尺寸…

作者头像 李华
网站建设 2026/6/9 19:40:41

Cursor AI编程助手试用期突破终极解决方案

Cursor AI编程助手试用期突破终极解决方案 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro. We have this limit in pla…

作者头像 李华
网站建设 2026/6/10 14:02:19

PDF翻译中文乱码终结指南:从诊断到根治的完整方案

PDF翻译中文乱码终结指南&#xff1a;从诊断到根治的完整方案 【免费下载链接】PDFMathTranslate PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译&#xff0c;支持 Google/DeepL/Ollama/OpenAI 等服务&#xff0c;提…

作者头像 李华