2023-07-14

题目

题目传送门

题目大意

给定一个 \(n\) 个点的树,这 \(n\) 个点编号为 \(1\) 到 \(n\)。

现在要选择断掉两条边,会形成三个连通块,假设这三个连通块内的点数分别为 \(a,b,c\),那么您要做的就是最小化 \(\max\{a,b,c\}-\min\{a,b,c\}\) 的大小,求这个最小值。

难度&重要性(1~10):6

题目来源

COCI,luogu

题目算法

STL

解题思路

由于要切两刀,我们可以考虑先枚举 \(i\) 切断点 \(i\) 与其父节点的连边,再去找另一条边。

这里我们这知道,由于一条边已经定下,另一条边当然是切得越平均越好。

设切断节点 \(j\) 与其父节点的连边,\(siz_x\) 为以节点 \(x\) 为根的子树大小。

考虑两种情况:

  • 如果节点 \(j\) 是节点 \(i\) 的祖先,那么三棵树的大小就为 \(siz_i,siz_j-siz_i,n-siz_i-siz_j\)。
  • 如果节点 \(j\) 不是节点 \(i\) 的祖先,那么三棵树的大小就为 \(siz_i,siz_j,n-siz_i-siz_j\)。

因为需要第二条边切的尽量平均,则越接近 \(\frac{n-siz_i}{2}\) 越好,这里我们就可以用 set 来维护它的前驱后继来得到答案。

完成状态

已完成

随机推荐

  1. 2021-05-17:数组中所有数都异或起来的结果,叫做异或和。给定一个数组arr,可以任意切分成若干个不相交的子数组。其中一定存在一种最优方案,使得切出异或和为0的子数组最多。返回这个最多数量。

    2021-05-17:数组中所有数都异或起来的结果,叫做异或和.给定一个数组arr,可以任意切分成若干个不相交的子数组.其中一定存在一种最优方案,使得切出异或和为0的子数组最多.返回这个最多数量. 福 ...

  2. 2021-08-07:与数组中元素的最大异或值。给你一个由非负整数组成的数组 nums 。另有一个查询数组 queries ,其中 queries[i] = [xi, mi] 。第 i 个查询的答案是

    2021-08-07:与数组中元素的最大异或值.给你一个由非负整数组成的数组 nums .另有一个查询数组 queries ,其中 queries[i] = [xi, mi] .第 i 个查询的答案是 ...

  3. docker安装go-fastdfs

    1.docker命令安装 docker run -d --name fastdfs -p 8180:8080 sjqzhang/go-fastdfs 2.浏览器访问 http://192.168.20 ...

  4. 【Vue2.x源码系列08】Diff算法原理

    什么是虚拟DOM DOM是很慢的,其元素非常庞大,当我们频繁的去做 DOM更新,会产生一定的性能问题,我们可以直观感受一下 div元素包含的海量属性 在Javascript对象中,虚拟DOM 表现为一 ...

  5. drf——序列化之source(了解)、定制字段的两种方式(重要)、多表关联反序列化保存、反序列化字段校验、ModelSerializer使用

    1 序列化高级用法之source(了解) # 1.创建了5个表(图书管理的5个) # 2.对book进行序列化 # 总结:source的用法 1.修改前端看到的字段key值--->source指 ...

  6. CompTIA Pentest+

    关于学习后CompTIA Pentest+笔记 渗透测试工具 讲述了nmap,burp Suite,Metasploit,Nessus,hydra的入门使用 nmap:https://www.cnbl ...

  7. Python3.9安装

    一.安装python3.9 链接:https://pan.baidu.com/s/1mDkgKt2KSoMrKVxesb76Pg?pwd=ma4n 提取码:ma4n --来自百度网盘超级会员V4的分享 ...

  8. 三分钟快速了解什么是MES系统

    大家好,我是Edison. 近日我打算系统学习和整理一下MES/MOM系统相关的领域知识,从而构建我的业务域知识背景.万丈高楼平地起,我们先从快速了解什么是MES系统开始吧! 作为IT技术从业者,特别 ...

  9. 揭秘Spring依赖注入和SpEL表达式

    摘要:在本文中,我们深入探讨了Spring框架中的属性注入技术,包括setter注入.构造器注入.注解式属性注入,以及使用SpEL表达式进行属性注入. 本文分享自华为云社区<Spring高手之路 ...

  10. 【技术积累】Python中的NumPy库【二】

    NumPy库的主要类有哪些? NumPy库的主要类包括: ndarray:N维数组对象,是NumPy最重要的类之一.它是Python中数组的基本数据结构,可以进行高效的数学计算和数据处理操作. ufu ...