萌新看不懂题解,求助

P1600 [NOIP2016 提高组] 天天爱跑步

Belarus @ 2020-07-21 15:46:46

这一篇题解里面,这段话有些看不懂

c点产生贡献放在桶的deep[c]位置,计算b点获得的贡献时当然是从bucket1[deep[b]+w[b]]位置获取,于是得到1个贡献,你发现a结点也是用的同一个桶,这个还好,因为c确实给他做了贡献,可是e点呢?他是不应该获得贡献的!既然我会给和我无关的结点做贡献,那么其它无关的结点难免也会给我做贡献!
问题总结一下,对于一个点P来说,究竟哪些点在桶里面产生的贡献才是有效的。
答案是:以P为根递归整颗子树过程中在桶内产生的差值才是有效的

比如

既然我会给和我无关的结点做贡献,
那么其它无关的结点难免也会给我做贡献!
以P为根递归整颗子树过程中在桶内产生的差值才是有效的

为什么是这样?什么叫“在桶内产生的差值”

另外,这个题解是通过建边的方式代替集合(并查集)吗?


by Qiuly @ 2020-07-21 15:55:50

左转洛谷群和百度一下


by hater @ 2020-07-21 16:06:30

看不懂可以知难而退啊 /xk


by hater @ 2020-07-21 16:08:27

子树中的值 = 出子树时的值 - 进子树时的值


by Belarus @ 2020-07-21 16:09:05

@hater 我已经知难而退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退退了(大雾


by hater @ 2020-07-21 16:10:16

所以只要进出子树的时候记录一下值就好了

我不会讲的更详细了 /xk


by hater @ 2020-07-21 16:10:48

/dz


by Belarus @ 2020-07-21 16:11:48

@hater 我好像有点懂了,所以是分别开两个桶,一个上行,一个下行这样,然后再求差值吗?


by hater @ 2020-07-21 16:19:12

不是的


by hater @ 2020-07-21 16:19:50

P3605 [USACO17JAN]Promotion Counting P

这道题可以看一下 异曲同工

顺便水一道紫题


by Belarus @ 2020-07-21 16:20:24

@hater 我康康


|