摘要: 给定一棵 $n$ 个节点的树,边有权重 $w$ ,每个点有 $a_i$ 个人,需要选择两个点建设银行,使得所有人到最近银行的距离之和最小。单银行时,银行应建在树的重心,贡献可拆解到每条边,为 $w \min(size_u, S - size_u)$ ,其中 $size_u$ 是子树大小,$S$ 是总人数。对于双银行,通过枚举边将树分割成两部分,每部分独立求重心并计算贡献,利用动态规划和树的性质,结合重链剖分和倍增优化,时间复杂度为 $O(n \log n)$ 。代码实现了这一思路,通过遍历树结构求解最小距离和。 阅读全文
posted @ 2025-09-05 11:28 wing_heart 阅读(7) 评论(0) 推荐(0)