Solution

huangzelin 2023-07-17 21:40:16 12 返回题目

显然可以将一段数字的和转化为前缀和的关系

题目中给出的s,t,v 其实就是sum[t]-sum[s-1]=v

我们可以选择维护一棵树,但这样时间复杂度绝对会炸上天

所以我们想到要压缩路径,那么正解就是:

带 权 并 查 集 !

众所周知并查集其实是一棵树,如果我们在并查集的基础上同时维护点到祖先的关系,那就是带权并查集了

我们可以在维护f[i]的同时维护p[i],它表示点到祖先的距离(在本题中是前缀和差)

1.假如a,b拥有同一个祖先(a<b)

那么a到b的距离就是p[a]-p[b]

从向量的角度来想就是AO-BO=AB (这样是不是更容易理解^-^)

如果x!=p[a]-p[b] 那么这个商人就做假账了

太baby辣!!!

1.如果a和b的祖先分别是fa和fb

那么我们使

f[fa]=f[fb]

p[fa]=p[a]-x-p[b] // 向量理解法:AO1-AB-BO2=O2O1 (这么理解太方便了hhh)

那么我们的主函数就写完了

find(x) 也要稍微改一下,当然不是我偷懒这里不写,我只是想给你一个自己思考的机会(其实就是我懒)

{{ vote && vote.total.up }}