P17758 「RSOI-3G」树上操作 / tree
题目背景
题目来源:【HT-126-Div.2】核桃 CSP-S 组模拟赛
题目描述
给定一棵 $n$ 个节点的有根树,节点标号为 $1 \sim n$,根节点为 $1$。节点 $i$ 的权值为 $A_i$(保证 $A_i$ 互不相同)。给定一个常数 $X$。
对于树上的每一个节点 $u$,请你求出:在以 $u$ 为根的子树中,最多能选出多少个节点构成一个**共鸣子集** $S$。
**共鸣子集的定义为**:对于集合 $S$ 中的任意两个不同节点 $x, y \in S$,都满足 $A_x \oplus A_y \ge X$。(其中 $\oplus$ 表示按位异或运算)
输入格式
第一行包含两个整数 $n, X$,分别表示树的节点数和给定的常数。
第二行包含 $n$ 个整数 $A_1, A_2, \ldots, A_n$,表示每个节点的权值。保证所有 $A_i$ 互不相同。
接下来 $n-1$ 行,每行两个整数 $u, v$,表示树上有一条连接节点 $u$ 和 $v$ 的边。
输出格式
输出一行一个整数,表示所有节点子树答案之和 $\sum_{i=1}^n ans_i$。
说明/提示
**【样例解释 #1】**
对于子树 1,由于 $1 \oplus 7 = 6, 1 \oplus 10 = 11, 7 \oplus 10 = 13$,集合 $\{1, 7, 10\}$ 满足两两异或值 $\ge 6$。大小为 3,且无法选出大小为 4 的子集,故 $ans_1 = 3$。
对于子树 2,由于 $2 \oplus 10 = 8 \ge 6$,可选择集合 $\{2, 10\}$,故 $ans_2 = 2$。
对于子树 3、4、5,它们只有各自一个节点,故 $ans_3 = ans_4 = ans_5 = 1$。
答案之和为 $3 + 2 + 1 + 1 + 1 = 8$。
**【数据范围】**
**本题采用捆绑测试。**
对于 $100\%$ 的数据,$1 \le n \le 10^6$,$0 \le A_i, X < 2^{30}$。
| Subtask | 分值 | $n \le$ | 特殊性质 |
| :---: | :---: | :---: | :---: |
| 1 | $5$ | $15$ | 无 |
| 2 | $10$ | $10^3$ | 无 |
| 3 | $5$ | $10^6$ | $X = 0$ |
| 4 | $10$ | $10^6$ | 树的形态为以 $1$ 为中心的菊花图* |
| 5 | $15$ | $10^6$ | 树的形态为一条单链 |
| 6 | $25$ | $10^5$ | 无 |
| 7 | $30$ | $10^6$ | 无 |
***菊花图** 指除了节点 $1$ 以外,所有节点均与节点 $1$ 直接相连。