AcWing 846. 树的重心

简介: 笔记

AcWing 846. 树的重心


给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。


请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。


重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。


输入格式

第一行包含整数n,表示树的结点数。


接下来n-1行,每行包含两个整数a和b,表示点a和点b之间存在一条边。


输出格式

输出一个整数m,表示重心的所有的子树中最大的子树的结点数目。


数据范围

7.png

输入样例

9
1 2
1 7
1 4
2 8
2 5
4 3
3 9
4 6

输出样例:

4


代码

#include
#include
#include
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair PII;
const int N = 1e5 + 10;
int ans = 0x3f3f3f3f;
int n;
vectorvec[N];
int vis[N];
int dfs(int now) {
  vis[now] = 1;
  int sum = 1, res = 0;
  //res 剩余连通块中点数的最大值
  //sum 当前节点的子树点数再加上自己的点数
  for (int i = 0;i < vec[now].size();++i) {
    if (!vis[vec[now][i]]) {
      int s = dfs(vec[now][i]);//一个子树的大小
      res = max(res, s);//所有子树大小的最大值
      sum += s; //所有子树再加上根节点的大小
    }
  }
  res = max(n - sum, res);//父节点子树大小
  ans = min(ans, res); // 最大子树的最小值
  return sum;
}
int main() {
  cin >> n;
  for (int i = 0;i < n - 1;++i) {
    int u, v;
    cin >> u >> v;
    vec[u].push_back(v);
    vec[v].push_back(u);
  }
  dfs(1);
  cout << ans << endl;
}


目录
相关文章
|
Ubuntu 安全 网络安全
|
算法
3D打印新突破!曼大等提出DQN多样化图形路径规划器:锐角转弯降低超93%,热变形减少25%
【10月更文挑战第28天】曼彻斯特大学等机构的研究人员提出了一种基于深度Q网络(DQN)的3D打印路径规划器,能够高效处理多样化图形结构。该规划器在多个应用中表现出色,包括线框打印、连续纤维打印和金属打印,显著提高了打印质量和效率。然而,其复杂性和可扩展性仍需进一步优化。论文链接:https://arxiv.org/pdf/2408.09198
160 6
|
Java C++
18、JAVA入门——接口
18、JAVA入门——接口
216 0
18、JAVA入门——接口
leetcode第19题
上边我们遍历链表进行了两次,我们如何只遍历一次呢。 看了 leetcode 的讲解。 想象一下,两个人进行 100m 赛跑,假设他们的速度相同。开始的时候,第一个人就在第二个人前边 10m ,这样当第一个人跑到终点的时候,第二个人相距第一个人依旧是 10m ,也就是离终点 10m。 对比于链表,我们设定两个指针,先让第一个指针遍历 n 步,然后再让它俩同时开始遍历,这样的话,当第一个指针到头的时候,第二个指针就离第一个指针有 n 的距离,所以第二个指针的位置就刚好是倒数第 n 个结点。
151 0
leetcode第19题
|
4天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
14天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
8天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
565 210