CF686D. Kay and Snowflake[树的重心]

本文介绍了Codeforces上的CF686D问题,探讨如何求解一棵树的重心。通过两次深度优先搜索(DFS),首先确定每个子树的大小及其最大子树大小,然后找出子树的重心,并上移到整棵树的重心。最终,在查询时输出找到的重心位置。
摘要由CSDN通过智能技术生成

http://codeforces.com/contest/686/problem/D

这道题的题面很直接,就是求一树的中心。我们可以用两个dfs来解决掉。

首先一个树的重心的定义:以这个点为根,那么所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。

重心还有一个性质就是如果将子树的重心向上移动,总会移动到整个树的重心

第一个dfs先求出每个子树的大小和每个节点最大的子树大小,第二遍先求出来子树的重心,之后将最大的子树重心向上移,找到之后记录重心,查询的时候直接输出就行

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 3e5+5;
vector<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值