luogu 3676小清新数据结构题】的更多相关文章

推荐博客: http://www.cnblogs.com/Mychael/p/9257242.html 感觉还挺好玩的 首先考虑以1为根,把每一个点子树的权值和都算出来,记为$val_{i}$,那么在所有操作都没有开始的时候(以$1$为根的)$ans_{1} = \sum_{i= 1}^{n}val_{i}^{2}$ 考虑到一个修改的操作只会对修改的点$x$到根($1$)链上的点产生影响,那么一次修改只要修对这条树链上的点增加$v - a_{x}$(假设修改后的值为$v$)就好了. 链剖之后线段…
[Luogu3676]小清新数据结构题(动态点分治) 题面 洛谷 题解 先扯远点,这题我第一次看的时候觉得是一个树链剖分+线段树维护. 做法大概是这样: 我们先以任意一个点为根,把当前点看成是一棵有根树.比方说以\(1\)为根. 那么,在询问以\(p\)为根的时候的答案,我们看看哪些子树发生了变化. 发现真正会产生变化的只有\(1..p\)这条链上的所有点,其它点的贡献和以\(1\)为根时的贡献是一样的. 考虑这条链上的所有点的贡献变成了什么,假设这条链上的所有点分别是\(c_1,c_2...,…
https://www.luogu.org/problemnew/show/P3676 这题被我当成动态dp去做了,码了4k,搞了一个换根的动态dp #include<cstdio> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; struct E { int to,nxt; }e[]; ],ne; struct P1 { int len;ll a,b,c,…
题面戳我 题意:给一棵树,树上有点权,每次操作为修改一个点的点权,或者是询问以某个点为根时,每棵子树(以每个点为根,就有n棵子树)点权和的平方和. \(n\le2*10^5\),保证答案在long long范围内 sol 我们设\(s_i\)表示以\(p\)为整棵树的根时,以\(i\)为根的子树的点权和.设\(Sum\)表示所有点的点权和,即\(Sum=\sum_{i=1}^{n}val_i\). 所以这道题给出\(p\),就是要你求\(\sum_{i=1}^{n}s_i^2\). 我们先看\(…
Description: 给你一棵树,每次询问以一个点为根时所有子树点权和的平方和 带修改 Hint: \(n\le 2*10^5\) Solution: 这题只要推出式子就很简单了 如果不换根这个平方和树剖直接做就行了 考虑换根的影响了哪些点的贡献 显然只影响了\(1\)到\(u\)的路径上的点 把1到\(u\)这条路径上的点依次标记为\(1,2,3......k\) 我们设\(a_i\)为以1为根时\(i\)的点权和,\(b_i\)为以\(u\)为根的点权和 \(Ans=ans_1-\sum…
传送门 换根类型的统计问题动态点分治都是很好做的. 设所有点的点权和为$sum$ 首先,我们先不考虑求$\sum\limits_i s_i^2$,先考虑如何在换根的情况下求$\sum\limits_i s_i$. 考虑一个点$i$会被统计多少次,显然是$dep_i+1$,那么$\sum\limits_i s_i = \sum\limits_i (dep_i+1) \times val_i = \sum\limits_i dep_i \times val_i + sum$. $\sum\limit…
传送门 感觉这题做下来心态有点崩……$RMQ$求$LCA$没有树剖快我可以理解为是常数太大……然而我明明用了自以为不会退化的点分然而为什么比会退化的点分跑得反而更慢啊啊啊啊~~~ 先膜一波zsy大佬 讲讲做法.题目的要求是给定一个根$p$,求$\sum _{i=1}^ns_i^2$,其中$s_i$表示子树中的点权和 我们设$sum=\sum _{i=1}^n val_i$,即整棵树的点权和.先考虑一下$\sum _{i=1}^ns_i$怎么求.考虑一下每一个点的贡献,每一个点都会对被计算$dep…
题面 传送门 思路 本来以为这道题可以LCT维护子树信息直接做的,后来发现这样会因为splay形态改变影响子树权值平方和,是splay本身的局限性导致的 所以只能另辟蹊径 首先,我们考虑询问点都在1的情况 考虑一次修改带来的影响: 假设当前节点的值变动量为$delta$,修改节点为$u$ 那么对于所有位于路径$(1,u)$上的节点而言,它们的子树和以及子树平方和都会有改变 设$sum(u)$表示子树点权和,$sumsqr(u)$表示点权和的平方 那么$\forall v \in (1,u)$,$…
洛谷题面传送门 题目名称好评(实在是太清新了呢) 首先考虑探究这个"换根操作"有什么性质.我们考虑在换根前后虽然每个点的子树会变,但整棵树的形态不会边,换句话说,割掉每条边后,得到的两个子树的中点权之和不会变,因此我们考虑将这个东西与平方和挂钩.考虑构造 \(S=\sum\limits_{i=1}^nsiz_i(sum-siz_i)\),其中 \(siz_i\) 为 \(i\) 子树内所有点点权之和,\(sum\) 为所有点点权之和.那么不难发现 \(S\) 就是断掉所有点之后形成的两…
传送门 思路 这思路好妙啊! 首先很多人都会想到推式子之后树链剖分+线段树,但这样不够优美,不喜欢. 脑洞大开想到这样一个式子: \[ \sum_{x} sum_x(All-sum_x) \] 其中\(sum_x\)表示\(x\)子树和,\(All\)表示所有点的权值和. 发现不管哪个点为根,只要每个点的权值不变,这个式子的值就不变. 证明:对于点对\((u,v)\),\(w_u\times w_v\)被算了\(dis(u,v)\)次,因为每个在路径上的\(x\)都会算一次. 于是就有 \[ W…