【学习笔记】树的直径,重心

草莓 Strawberry

  • 膜拜 EternalAlexander
  • 假设 ∣ S ∣ ≥ 2 |S|\ge 2 S2,设直径的两个端点为 s s s t t t
  • 显然我们知道直径有一个中心
  • 假如我起点不在半径上,那么我下一步会把所有在半径上的点占领
  • 但是显然我可以把起点调整到半径上,然后把所有半径上的点占领
  • 然后我们对于其他的点求出到半径上的点的最大距离,排序过后就可以得到 S × G S\times G S×G的的最大值

CF1387B2

  • 对于一条边 ( u , v ) (u,v) (u,v),每条边对答案贡献最多为 2 min ⁡ ( s i z [ u ] , n − s i z [ u ] ) 2\min(siz[u],n-siz[u]) 2min(siz[u],nsiz[u])
  • 考虑找到重心,对除了重心外的点两两跨子树匹配
  • 因为任意子树大小不超过 n 2 \frac{n}{2} 2n,所以存在两两配对的方案
  • 细节问题就不说了

树的直径

  • 给定一棵树,求编号 [ l , r ] [l,r] [l,r]内两点距离的最大值。 n ≤ 1 0 5 n\le 10^5 n105
  • 考虑树上两个点集 S S S T T T,若集合 S S S中的最远点对是 u → v u\to v uv T T T中的最远点对是 w → x w\to x wx,那么 S ∪ T S∪T ST的最远点对一定是 u → v u\to v uv w → x w\to x wx u → w u\to w uw u → x u\to x ux v → w v\to w vw v → x v\to x vx 六对之一
  • 可以线段树维护。可以用欧拉序列求 L C A LCA LCA平衡复杂度做到预处理 O ( n log ⁡ n ) O(n\log n) O(nlogn),询问 O ( 1 ) O(1) O(1)
  • 总复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)

哈夫曼树(Hufman Tree)

  • 构造方法:每次取权值最小的两个点,加一个新的节点作为他们的父节点,将新的节点权值设为它们的前缀和。

__EOF__

本文作者仰望星空的蚂蚁
本文链接https://www.cnblogs.com/cqbzly/p/17530113.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   仰望星空的蚂蚁  阅读(8)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2021-07-23 【模板】Splay
2021-07-23 【学习笔记】长链剖分
2021-07-23 【浅谈】置换群
点击右上角即可分享
微信分享提示