题解:P10842 【MX-J2-T3】Piggy and Trees

题目链接:

  • link,点击这里喵。

题意简述:

  • 给出一棵树,取一点 i i i,并另取两点 u u u v v v,在 u u u v v v 简单路径上任取一点使这点与 i i i 的距离最小,计算出这样所有的组合的距离的总和。

思路:

  • 看眼数据范围,总点数 n ≤ 2 × 1 0 5 n\le2\times10^5 n2×105,考虑线性算法,有关于树,首先考虑树上 dp
  • 这道题题面很具有迷惑性,她把 ∑ u = 1 n ∑ v = u + 1 n ∑ i = 1 n f ( u , v , i ) \sum\limits_{u = 1}^n \sum\limits_{v = u + 1}^n \sum\limits_{i = 1}^n f(u, v, i) u=1nv=u+1ni=1nf(u,v,i) 中的 $\sum\limits_{i = 1}^n $ 放在了后面,这就导致如果思路想到枚举 u u u v v v,就很难 dp 了,根据 ∑ \sum 的性质,我们把 $\sum\limits_{i = 1}^n $ 提到外面去,原式就变成了 ∑ i = 1 n ∑ u = 1 n ∑ v = u + 1 n f ( u , v , i ) \sum\limits_{i = 1}^n \sum\limits_{u = 1}^n \sum\limits_{v = u + 1}^n f(u, v, i) i=1nu=1nv=u+1nf(u,v,i),思路就简洁明了了,记录每个点的答案,最后相加即可。
  • 那么 O ( n ) O(n) O(n) 做法考虑换根 dp,这里假设以点 1 1 1 为出发点。

做法:

  • 定义 l j i lj_i lji 为点 i i i 及其子树所包含的点对数量, s i z i siz_i sizi 为点 i i i 及其子树的大小, s i z i siz_i sizi 为以点 i i i ∑ u = 1 n ∑ v = u + 1 n f ( u , v , i ) \sum\limits_{u = 1}^n \sum\limits_{v = u + 1}^n f(u, v, i) u=1nv=u+1nf(u,v,i) 的答案。

    dfs1:

    • s i z n o w = ∑ t o s i z t o siz_{now}=\sum\limits_{to} siz_{to} siznow=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值