树的重心模板

【模板】树的重心 树的重心 定义:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。 算法流程 首先,利用前向星存边建立边表。由于无向,所以要连两次边。我们用一次 dfs()dfs()dfs() 建立以1为根节点时每个结点所在子树的结点数。 接下来考虑把这个点删掉的结果,如果一个非根结点有 ppp 个儿子,那么删掉这个点之后会有 p+1p+... 阅读详情
#include<bits/stdc++.h>
#pragma GCC optimize(2)
#define int long long
#define ull unsigned long long
#define endl '\n'
using namespace std;
const int N=1e5;
int fa[N+50],pre[N+50],si[N+50],r[N+50]; 
struct node
{
	int from,to,next;
}a[N*2+50];
int n,k;
void add(int u,int v)
{
	k++;
	a[k].to=v;
	a[k].next=pre[u];
	pre[u]=k;
}
int dfs(int x,int f)
{
	si[x]=1;
	fa[x]=f;
	for(int i=pre[x];i!=0;i=a[i].next)
	{
		if(a[i].to!=f)
		{
			si[x]=si[x]+dfs(a[i].to,x);
		}
	}
	return si[x]; 
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	int x,y;
	for(int i=1;i<=n-1;i++)
	{
		cin>>x>>y;
		add(x,y);
		add(y,x);
	}
	dfs(1,0); 
	int mi=INT_MAX;
	for(int i=1;i<=n;i++)
	{
		r[i]=n-si[i];
		for(int j=pre[i];j!=0;j=a[j].next)
		{
			if(fa[a[j].to]==i)
			{
				r[i]=max(r[i],si[a[j].to]); 
			}
		}
		mi=min(mi,r[i]); 
	}
	for(int i=1;i<=n;i++)
	{
		if(r[i]==mi)
		{
			cout<<i<<" ";
		}
	}
	return 0;
}

树的重心以及其性质 模板 文章目录树的重心性质模板题 树的重心 定义:树的重心也叫树的质心。对于一棵树n个节点的无根树,找到一个点,使得把树变成以该点为根的有根树时,最大子树的结点数最小。换句话说,删除这个点后最大连通块(一定是树)的结点数最小。 性质 树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个重心,他们的距离和一样。 一个点是重心,等价于,以这个点为根,它的每个子树的大小,都不会超过整个树大小的一半 把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。 一棵树添加或者删除一个节点,树的重心最多 阅读详情

相关推荐

模板 - 树上问题(树的直径、动态查询树的直径、树的重心)

整理的算法模板合集: ACM模板 目录一、树的直径树形DP两次DFS / BFS(找到直径的两个端点)二、动态修改树的边权并求每个时刻的直径(线段树)三、树的重心 一、树的直径 树的直径满足如下性质: 若有多条直径,则所有的直径之间皆有公共点。 直径的两端一定是叶子。 树中距离某一直径端点最远的点,至少有一个是该直径的另一个端点。 对于树上任意一个点,与之距离最远的一个点,至少有一个直径的端点。 给你一个无权无向的树。编写程序以输出该树中最长路径(从一个节点到另一个节点)的长度。在这

繁凡さん的博客 1676

图论--树的重心(DFS) 模板

const int maxn=500005; int tot=0,n; int ans,size; int sx[maxn],head[maxn]; int vis[maxn]; struct edge { int to,next; } eg[maxn]; void add(int u,int v) { eg[tot].to=v; eg[tot].next=head[u]...

日拱一卒,功不唐捐 2903

高温环境下RS485通信故障分析与MOS管解决方案

RS485通信作为工业控制领域的基础总线技术,其可靠性直接影响系统稳定性。在高温等恶劣环境下,传统三极管开关电路会因温度特性导致通信故障。通过分析三极管Ube电压随温度变化的特性,揭示了电路失效的物理原理。相比之下,MOS管作为电压控制型器件,具有温度稳定性好、功耗低等优势,更适合工业环境应用。本文通过一个发动机舱内RS485通信故障的实际案例,详细对比了三极管与MOS管在高温环境下的性能差异,并给出了具体的电路改进方案。该案例对工业通信接口设计具有普遍参考价值,特别适用于需要应对高温、振动等挑战性环境的硬

weixin_42612405的博客 405

[YM]模板-树的重心

树的某个节点,当去掉该节点后,树的各个连通分量中,节点数最多的连通分量其节点数达到最小值。上图5就是重心,没有再优的点使得分割的最大连通块大小最小化。dfs每个节点的子节点来统计siz大小。学此之前还是要掌握一下基础的树形dp。那么节点上面的子树大小就是n-siz。最大子树大小最小的节点就是树的重心。求子树的大小就用到了树形dp。实质就是统计各个子树的大小。最后统计最大子树的大小即可。由于dfs是向下递归。

2302_80481841的博客 380

使用spacy规则化提取自然语言文本信息

1. 安装spacy pip install spicy spicy还需要载入文本库,使用pip的下载方式: python3 -m spacy download en_core_web_sm 但是很有可能因为网络问题下载速度非常缓慢,所以可以选择到github上去直接下载(注意和自己的spacy版本匹配):github下载链接 下载*.tar.gz文件即可。 然后切换到下载路径, pip install en_core_web_sm-3.1.0.tar.gz 2. spacy的一些基础用法 使用spa

六六六六神的博客 1818

别再到处找教程了!Windows下用FFmpeg+Mediamtx+VLC搭建本地RTSP流媒体服务器,保姆级配置流程

本文详细介绍了在Windows系统下使用FFmpeg、Mediamtx和VLC搭建本地RTSP流媒体服务器的完整流程。从环境准备到核心配置,再到推流和拉流的实战技巧,提供了保姆级的避坑指南和优化建议,帮助开发者快速实现稳定的流媒体服务部署。

weixin_42614269的博客 212

9.8 树的重心、图的联通块、拓扑排序理解 +模板代码+《算法进阶指南》例题

树的重心、图的联通块、拓扑排序理解 +模板代码+《算法进阶指南》例题

m0_62709362的博客 445

耶鲁大学《博弈论》课程——逆向归纳

耶鲁大学《博弈论》课程——逆向归纳

ZYLer_的博客 7870

846. 树的重心

846. 树的重心

2401_82736456的博客 294

H3C模拟器HCL防火墙路由模式主备配置实验

摘要:本文详细介绍了网络拓扑规划与设备配置方案。运营商仅提供一个接口地址,通过虚IP技术实现双防火墙高可用部署:主备防火墙分别配置10.20.10.1/29和10.20.10.2/29作为实际上联地址,共享10.10.10.2/24虚IP;下联配置172.168.10.0/24网段,核心交换机配置VLAN接口及192.168.10.1、192.168.20.1两个下联接口。文章包含运营商路由器、防火墙(HA配置、VVRP设置)和核心交换机的具体命令行配置步骤,并强调需进行主备切换验证。整个方案实现了单运营商

LQ的博客 1122

LSTM 双向 Bi-LSTM

LSTM 双向 Bi-LSTM

jacke121的专栏 1516

树的重心模板 / poj1655

树的重心

m0_54646258的博客 398

Unity之Timeline教程

Unity Timeline是Unity的一种时间轴编辑器工具,用于制作和管理游戏中的动画、剧情以及事件触发。它提供了直观的界面,使得开发者可以通过拖放操作轻松创建和编辑时间轴。Activation Track:用于控制物体的激活状态。可以在轨道上添加关键帧,控制物体的激活和非激活状态。Animation Track:用于处理物体的动画。可以在此轨道上添加关键帧,编辑物体的动画状态。Audio Track:用于处理场景中的音频。可以管理音频的播放、暂停、淡入淡出等操作。

TxNet 9439

Balancing Act POJ - 1655 (树的重心模板题)

Balancing Act POJ - 1655 (树的重心模板题) 题目链接 题目大意:给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的. Input 1 7 2 6 1 2 1 4 4 5 3 7 3 1 output 1 2 树的重心: 找到一个点,其所有的子...

deerly_的博客 487

Open3D 计算FPFH特征【2025最新版】

FPFH特征描述子的python实现,本文最新更新时间为:2025年3月18日。

点云侠的博客 5273

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

U104609 【模板】树的重心

U104609 树的重心模板

2403_87530627的博客 368

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

树的重心(模板题)

树的重心: 树的重心也叫树的质心。找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。 #include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N=1e5+10; //用链表结构存储每个点的边 int h[N]; //h[]用于存储每个点的头节点 int e[2*N]; //用

马小兜要努力呀 1199

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

求树的重心 模板

树的重心: 树的重心也叫树的质心。找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。 void dfs(int u,int pre) { num[u]=1; f[u]=0; for(int i=head[u];i;i=e[i].next) { int v=e[i].to; if(v...

weixin_43670649的博客 213

[模板]树的重心

/** [模板] 求树的重心 [任务] 求树的重心 [接口] vector<edge> way[maxn] 无向图 int siz[] 该节点的子节点个数(包括自己) int mu[] 该节点的(最大,节点数最多)子树的节点数 allnode

Uniontake 239

U328173 【模板】树的重心 题解

U328173 【模板】树的重心## 题目背景本蒟蒻正在学习树的重心,然而搜不到对应模板题,于是自己出了一道模板题。## 题目描述给定一棵无根树,求这棵树的重心(可能有多个)。计算以无根树每个点为根节点时的最大子树大小,这个值最小的点称为无根树的重心。## 输入格式第一行一个整数 $n$ 代表树的点数。接下来 $n - 1$ 行,每行两个整数 $u, v$,代表 $u, v$ 之间有一条无向边。## 输出格式一行多个整数,表示你找到的所有重心的节点编号,升序排列。

Matthew_zhu_的博客 685

树的重心 poj3701 模板题

树的重心也叫树的质心。找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。 思路:dfs深搜+回溯 poj3701 (有多个重心) AC代码: #include<iostream> #include<algorithm> #include<cstdio> #include<cstrin...

ecjtu_17_TY的博客 467

树的重心(模板)

代码定义:树的重心也叫树的质心。对于一棵树n个节点的无根树,找到一个点,使得把树变成以该点为根的有根树时,最大子树的结点数最小。换句话说,删除这个 [1] 点后最大连通块(一定是树)的结点数最小。 性质: 树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个距离和,他们的距离和一样。 把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。 ...

weixin_30349597的博客 144

树的重心 背诵用模板

树的重心=最大子树节点数 最小 的点 void dfs(int now,int fu){       size[now]=1;        int maxx=0;     for (int i=xia[now];i!=-1 ; i=hou[i]){           int nd=zhong[p]; if (nd==fu || you[nd]) continue;    

-----PSI----- 467

AcWing 846. 树的重心(模板)

给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。 输入格式 第一行包含整数n,表示树的结点数。 接下来n-1行,每行包含两个整数a和b,表示点a和点b之间存在一条边。 输出格式 输出一个整数m,表示重心的所有的子树中最大的子树的结点数目。 数据范围 1≤n≤105 输入样例 9 1 2

qq_45098405的博客 487
上一篇: 树的中心模板
下一篇: 并查集模板
Aidensunking
博客等级 码龄3年 34粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值