CFCF2194F2.Again Trees... (hard version)

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是该问题的困难版本。不同之处在于本版本中 k10k \leq 10。只有在你完成了所有版本的本题后,才可以进行 hack。

给定一棵包含 nn 个顶点的树。每个顶点上写有一个非负整数 ava_v。同时给定 kk 个互不相同的非负整数 b1,,bkb_1, \ldots, b_k

我们称一组边为美丽的,如果在移除这些边后,树被分成若干连通块,并且每个连通块内所有顶点的数 ava_v 的按位异或值属于集合 bb

你需要计算该树中美丽的边集的数量,对 109+710^9 + 7 取模。

输入格式

每个测试数据包含多个测试用例。第一行包含测试用例数量 tt1t5001 \le t \le 500)。随后是各个测试用例的描述。

每组数据的第一行包含两个整数 nnkk2n1052 \leq n \leq 10^51k101 \leq k \leq 10)——树上的顶点数和集合 bb 的大小。

接下来的 n1n-1 行描述树的边。第 ii 行包含两个整数 viv_iuiu_i1vi,uin1 \leq v_i, u_i \leq n)——表示第 ii 条边连接的两个顶点。

接下来一行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n0ai<2300 \leq a_i < 2^{30})——每个顶点上的值。

最后一行包含 kk 个互不相同的整数 b1,b2,,bkb_1, b_2, \ldots, b_k0bi<2300 \leq b_i < 2^{30})——集合 bb 中的元素。

保证所有测试数据中 nn 的总和不超过 10510^5

输出格式

对于每个测试用例,输出一个整数,表示美丽边集的数量。

输入输出样例

  • 输入#1

    4
    5 1
    1 2
    1 3
    3 4
    2 5
    0 2 2 3 3
    1
    5 1
    4 5
    1 2
    3 1
    3 5
    0 0 2 0 2
    0
    5 2
    1 2
    1 3
    3 4
    2 5
    0 2 2 3 3
    1 3
    4 1
    1 2
    2 3
    3 4
    1 1 1 1
    1

    输出#1

    2
    8
    4
    3

说明/提示

下图为第一个测试用例的示意图。在该示例中,你可以删除顶点 1122 之间的边。此时,由顶点 2255 组成的连通块的异或值为 a2a5=23=1a_2 \oplus a_5 = 2 \oplus 3 = 1。由顶点 113344 组成的连通块的异或值为 a1a3a4=023=1a_1 \oplus a_3 \oplus a_4 = 0 \oplus 2 \oplus 3 = 1。第二种美丽集合是只删除连接顶点 1133 的那条边。

在第三个测试用例中,美丽边集为(用一对顶点表示边):[(1,2)],[(1,3)],[(2,5)],[(3,4)][(1, 2)], [(1, 3)], [(2, 5)], [(3, 4)]。注意前两个样例唯一不同之处是集合 bb

在第四个测试用例中,美丽边集为:[(1,2)],[(3,4)],[(1,2),(2,3),(3,4)][(1, 2)], [(3, 4)], [(1, 2), (2, 3), (3, 4)]

首页