Codeforces 685B Kay and Snowflake 树的重心

本文介绍了一种在树形结构中查找重心的有效方法,并通过实例解释了如何利用子树的大小来确定重心的位置。该算法适用于需要频繁查询树中重心的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:给一棵树,每次查询以点v为根节点的子树的重心。

题解:这里用到的性质是:重心在当前节点到他重儿子为根的子树,重心之间的路径上。

我是这样想,若一个根节点有n棵子树,那么其重心肯定在size最大的那一棵子树上,所以重心就在这棵子树的重心与当前根之间的路径上。

那我们只要从这个重心开始向上搜,那么第一个满足条件的就是重心。

条件为:size[u] - size[重心] *2<=size[u]) ,即以这个点为根,那么所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。

代码:传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值