#C1002. 树上巡路

树上巡路

题目描述

NN 个地点,编号为 1,2,,N1,2,\ldots,N,这些地点通过 N1N-1 条双向道路连通。

记两个地点 u,vu,v 之间的道路条数为 d(u,v)d(u,v),现在要安排一次长度为NN的巡路顺序

p1,p2,,pN.p_1,p_2,\ldots,p_N.

p1p_1出发,pNp_N结束,满足每个地点恰好经过一次。

巡路时要求对于任意 1i<jN1\le i<j\le N,都要满足:

d(1,pi)d(1,pj).d(1,p_i)\le d(1,p_j).

给定一个正整数 KK。如果一个巡路顺序对任意1i<N1 \leq i <N还满足:

d(pi,pi+1)K,d(p_i,p_{i+1})\le K,

那么称它是一个合法的 KK-巡路顺序。

F(K)F(K) 为合法的 KK-巡路顺序数量。你需要对每个询问的 KK,输出 F(K)F(K)109+710^9+7 取模后的值。

输入格式

每个测试文件包含多个测试用例。

第一行包含一个整数 TT,表示测试用例数。

对于每个测试用例:

  • 第一行包含两个整数 N,QN,Q
  • 接下来 N1N-1 行,每行包含两个整数 u,vu,v,表示 uuvv 之间有一条边;
  • 最后一行包含 QQ 个整数 K1,K2,,KQK_1,K_2,\ldots,K_Q

输出格式

对于每个测试用例,输出一行 QQ 个空格分隔的整数,第 ii 个整数为

F(Ki)mod(109+7).F(K_i)\bmod (10^9+7).

样例1输入

2
3 3
1 2
1 3
1 2 3
6 3
1 2
1 3
3 4
3 5
3 6
1 2 3

样例1输出

0 2 2
0 6 12

样例1解释

第一组数据中,离 11 号地点最近的是地点 11 本身,地点 2,32,3 到地点 11 的距离相同。因此巡路顺序只能先访问 11,再访问 2,32,3 的某种顺序。

K=1K=1 时,最后两次访问的地点之间距离为 22,没有顺序合法;当 K2K\ge 2 时,[1,2,3][1,2,3][1,3,2][1,3,2] 都合法,答案为 22

第二组数据中,同样距离的地点有多种排列方式,但相邻访问地点之间的距离会随排列变化,所以 K=2K=2K=3K=3 的答案不同。

样例2

见选手目录下的 layers/layers2.inlayers/layers2.ans

该样例满足子任务 11 的约束条件。

样例3

见选手目录下的 layers/layers3.inlayers/layers3.ans

该样例满足子任务 22 的约束条件。

样例4

见选手目录下的 layers/layers4.inlayers/layers4.ans

该样例满足子任务 33 的约束条件。

样例5

见选手目录下的 layers/layers5.inlayers/layers5.ans

该样例满足子任务 44 的约束条件。

样例6

见选手目录下的 layers/layers6.inlayers/layers6.ans

该样例满足子任务 55 的约束条件。

数据范围

对于所有测试数据,均有:

  • 1T5×1051\le T\le 5\times 10^5
  • 1QN5×1051\le Q\le N\le 5\times 10^5
  • 1KiN1\le K_i\le N
  • 每个测试文件中所有测试用例的 NN 之和不超过 5×1055\times 10^5
  • 输入的 N1N-1 条边构成一棵树。
子任务编号 分值 约束条件
11 1010 N10\sum N\le 10
22 1515 Q2Q\le 2Ki2K_i\le 2
33 2525 N3000\sum N\le 3000Q5Q\le 5
44 2222 Q5Q\le 5
55 2828 无额外限制

本题采用捆绑测试。每个子任务内的测试点必须全部通过,才能获得该子任务分数。