背景
题目来源:【HT-126-Div.2】核桃 CSP-S 组模拟赛
题目描述
给定一棵 n 个节点的有根树,节点标号为 1∼n,根节点为 1。节点 i 的权值为 Ai(保证 Ai 互不相同)。给定一个常数 X。
对于树上的每一个节点 u,请你求出:在以 u 为根的子树中,最多能选出多少个节点构成一个共鸣子集 S。
共鸣子集的定义为:对于集合 S 中的任意两个不同节点 x,y∈S,都满足 Ax⊕Ay≥X。(其中 ⊕ 表示按位异或运算)
输入格式
第一行包含两个整数 n,X,分别表示树的节点数和给定的常数。
第二行包含 n 个整数 A1,A2,…,An,表示每个节点的权值。保证所有 Ai 互不相同。
接下来 n−1 行,每行两个整数 u,v,表示树上有一条连接节点 u 和 v 的边。
输出格式
输出一行一个整数,表示所有节点子树答案之和 ∑i=1nansi。
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=13,集合 {1,7,10} 满足两两异或值 ≥6。大小为 3,且无法选出大小为 4 的子集,故 ans1=3。
对于子树 2,由于 2⊕10=8≥6,可选择集合 {2,10},故 ans2=2。
对于子树 3、4、5,它们只有各自一个节点,故 ans3=ans4=ans5=1。
答案之和为 3+2+1+1+1=8。
【数据范围】
本题采用捆绑测试。
对于 100% 的数据,1≤n≤106,0≤Ai,X<230。
| Subtask |
分值 |
n≤ |
特殊性质 |
| 1 |
5 |
15 |
无 |
| 2 |
10 |
103 |
| 3 |
5 |
106 |
X=0 |
| 4 |
10 |
树的形态为以 1 为中心的菊花图* |
| 5 |
15 |
树的形态为一条单链 |
| 6 |
25 |
105 |
无 |
| 7 |
30 |
106 |
*菊花图 指除了节点 1 以外,所有节点均与节点 1 直接相连。