news 2026/4/17 1:21:13

树的中心小结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树的中心小结

树的中心问题是指:当给出 n 个结点与 n-1 条边后,要选定一个点作为整棵树的根结点,使得从该点到每个子结点的最长路径最短。

树的中心问题主要有两种方法:BFS/DFS 进行搜索、树形 DP 进行状态转移

例题:

U392706 【模板】树的中心

题目背景

树的中心定义为:一个节点作为整棵树的根节点时,深度最大的节点的深度最小,则该节点是树的中心。

注意,树的中心不一定唯一。

题目描述

给定一棵 n 个节点的树,求树的所有中心。

输入格式

第一行一个整数 n。

接下来 n−1 行每行三个整数:x,y,z,表示存在一条边 (x,y),边权为 z。

输出格式

若干行,每行一个整数,表示所有树的中心的节点编号,从小到大排序。

思路

首先的中心一定位于树的直径上,且树的中心就是树的直径的中点,所以就需要找到直径之后再遍历一遍,找到其中靠中间的一个或两个节节点

代码

#include<bits/stdc++.h>0 using namespace std; long long n , x , y , z , cnt , a[1000005] , depth[10000005] , tmp , father[10000005]; vector <pair<long long , long long> > g[100005]; void dfs(int u , int fa , int d){ depth[u] = d; father[u] = fa; if(depth[u] > depth[tmp]){ tmp = u; } for(int i = 0;i < g[u].size();i++){ int v = g[u][i].first; int w = g[u][i].second; if(v == fa){ continue; } dfs(v , u , d + w); } } long long vis[100005]; void dfs2(int u){ if(vis[u]){ return; } a[++cnt] = u; vis[u] = true; for(int i = 0;i < g[u].size();i++){ int v = g[u][i].first; int w = g[u][i].second; if(w == 0 && !vis[u]){ dfs2(v); } } } int main(){ scanf("%d" , &n); for(int i = 1;i < n;i++){ scanf("%d%d%d" , &x , &y , &z); g[x].push_back({y , z}); g[y].push_back({x , z}); } dfs(1 , 0 , 0); int d1 = tmp; dfs(tmp , 0 , 0); int d2 = tmp; int minx = 0x3f3f3f3f; tmp = d2; while(1){ int cont = max(depth[d2] - depth[tmp] , depth[tmp]); minx = min(minx , cont); if(tmp == d1){ break; } tmp = father[tmp]; } tmp = d2; while(1){ int cont = max(depth[d2] - depth[tmp] , depth[tmp]); if(cont == minx){ a[++cnt] = tmp; } if(tmp == d1){ break; } tmp = father[tmp]; } sort(a + 1 , a + 1 + cnt); for(int i = 1;i <= cnt;i++){ cout << a[i] <<endl; } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 1:17:12

Simulink MinMax模块避坑指南:当uint8遇上int8,仿真结果为何会‘丢1’?

Simulink MinMax模块数据类型陷阱&#xff1a;uint8与int8混合运算的“幽灵减1”现象解析 在嵌入式系统建模领域&#xff0c;Simulink作为行业标准工具链的核心组件&#xff0c;其模块库的稳定性直接关系到数百万工程师的日常开发效率。然而&#xff0c;即使是经过严格验证的基…

作者头像 李华
网站建设 2026/4/17 1:16:57

实战指南:从零搭建TPshop商城Linux环境与云服务器部署

1. 环境准备&#xff1a;从虚拟机到云服务器选择 搭建TPshop商城的第一步是准备运行环境。对于初学者来说&#xff0c;我强烈建议先用虚拟机练手&#xff0c;等熟悉流程后再迁移到云服务器。这里我分享两种主流方案&#xff1a; 方案一&#xff1a;本地虚拟机搭建&#xff08;学…

作者头像 李华
网站建设 2026/4/17 1:14:37

MSPM0G3507_STLink_烧录 4.16

MSPM0G3507 ST-Link 烧录为什么用这个烧录&#xff0c;为什么能烧录 没钱。 避开了 PDSC: Sequence Execution failed 这类兼容问题。 之前报错的核心原因&#xff1a; 工程是 MSPM0G3507调试器用的是 ST-LinkTI 的 MSPM0 Device Pack 里带的调试序列&#xff0c;和当前这套 S…

作者头像 李华
网站建设 2026/4/17 1:11:29

flutter doctor问题解决

mac端未安装CocoaPods gem install cocoapods --user-installgem依赖Ruby&#xff0c;系统自带的2.5Ruby和新版cocoapods不兼容 安装homebrew /bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"选择gitee选择中科大 bre…

作者头像 李华