33OJ
登录 注册

#P17758. 「RSOI-3G」树上操作 / tree

「RSOI-3G」树上操作 / tree

背景

题目来源:【HT-126-Div.2】核桃 CSP-S 组模拟赛

题目描述

给定一棵 nn 个节点的有根树,节点标号为 1∼n1 \sim n,根节点为 11。节点 ii 的权值为 AiA_i(保证 AiA_i 互不相同)。给定一个常数 XX。

对于树上的每一个节点 uu,请你求出:在以 uu 为根的子树中,最多能选出多少个节点构成一个共鸣子集 SS。

共鸣子集的定义为:对于集合 SS 中的任意两个不同节点 x,y∈Sx, y \in S,都满足 Ax⊕Ay≥XA_x \oplus A_y \ge X。(其中 ⊕\oplus 表示按位异或运算)

输入格式

第一行包含两个整数 n,Xn, X,分别表示树的节点数和给定的常数。

第二行包含 nn 个整数 A1,A2,…,AnA_1, A_2, \ldots, A_n,表示每个节点的权值。保证所有 AiA_i 互不相同。

接下来 n−1n-1 行,每行两个整数 u,vu, v,表示树上有一条连接节点 uu 和 vv 的边。

输出格式

输出一行一个整数,表示所有节点子树答案之和 ∑i=1nansi\sum_{i=1}^n ans_i。

5 6
1 2 5 7 10
1 2
1 3
2 4
2 5
8

提示

【样例解释 #1】

对于子树 1,由于 1⊕7=6,1⊕10=11,7⊕10=131 \oplus 7 = 6, 1 \oplus 10 = 11, 7 \oplus 10 = 13,集合 {1,7,10}\{1, 7, 10\} 满足两两异或值 ≥6\ge 6。大小为 3,且无法选出大小为 4 的子集,故 ans1=3ans_1 = 3。

对于子树 2,由于 2⊕10=8≥62 \oplus 10 = 8 \ge 6,可选择集合 {2,10}\{2, 10\},故 ans2=2ans_2 = 2。

对于子树 3、4、5,它们只有各自一个节点,故 ans3=ans4=ans5=1ans_3 = ans_4 = ans_5 = 1。

答案之和为 3+2+1+1+1=83 + 2 + 1 + 1 + 1 = 8。

【数据范围】

本题采用捆绑测试。

对于 100%100\% 的数据,1≤n≤1061 \le n \le 10^6,0≤Ai,X<2300 \le A_i, X < 2^{30}。

Subtask 分值 n≤n \le 特殊性质
1 55 1515 无
2 1010 10310^3
3 55 10610^6 X=0X = 0
4 1010 树的形态为以 11 为中心的菊花图*
5 1515 树的形态为一条单链
6 2525 10510^5 无
7 3030 10610^6

*菊花图 指除了节点 11 以外,所有节点均与节点 11 直接相连。