[unknown source] 快乐树

一、题目

题目描述

有一棵 (n) 个节点的数,每个点有点权 (a_i),定义一条路径的权值为路径上所有点的异或和,求所有路径的权值和,有 (q) 次修改,每次改一个点的点权。

数据范围

(n,qleq10000,a_i<2^{15})

二、解法

不难想到可以拆位,也就是对于每个二进制位分别考虑。

树上路径问题一定要往点分治方面想,然后由于有修改所以可以使用__点分树__

一开始陷入了错误的思路,因为点分树和原树的结构是不同的,所以直接记到根为 (0/1) 有多少条路径是难以维护的,因为我们要改经过被修改点的路径。这时候不妨考虑一些更加暴力的做法。

点分树是和线段树很搭的,对于每个分治中心都暴力建立其子树的线段树,每次修改都暴力跳点分树上的父亲,那么你就会发现修改是一段连续的区间,所以用线段树来区间修改是很容易的,维护一个翻转标记就可以了。

算答案就容斥一下,时间复杂度 (O(nlog^2nlog c)),暂时还没有代码。

原文地址:https://www.cnblogs.com/C202044zxy/p/14491602.html