Equidistant Vertices-树型dp-Codeforces Round #734 (Div. 3)

简介: DescriptionA tree is an undirected connected graph without cycles.You are given a tree of n vertices. Find the number of ways to choose exactly k vertices in this tree (i. e. a k-element subset of vertices) so that all pairwise distances between the selected vertices are equal (in other words,

Description


A tree is an undirected connected graph without cycles.


You are given a tree of n vertices. Find the number of ways to choose exactly k vertices in this tree (i. e. a k-element subset of vertices) so that all pairwise distances between the selected vertices are equal (in other words, there exists an integer c such that for all u,v (u≠v, u,v are in selected vertices) du,v=c, where du,v is the distance from u to v).


Since the answer may be very large, you need to output it modulo 109+7.


Input


The first line contains one integer t (1≤t≤10) — the number of test cases. Then t test cases follow.


Each test case is preceded by an empty line.


Each test case consists of several lines. The first line of the test case contains two integers n and k (2≤k≤n≤100) — the number of vertices in the tree and the number of vertices to be selected, respectively. Then n−1 lines follow, each of them contains two integers u and v (1≤u,v≤n, u≠v) which describe a pair of vertices connected by an edge. It is guaranteed that the given graph is a tree and has no loops or multiple edges.


Output


For each test case output in a separate line a single integer — the number of ways to select exactly k vertices so that for all pairs of selected vertices the distances between the vertices in the pairs are equal, modulo 109+7 (in other words, print the remainder when divided by 1000000007).


Example


input


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


output


6
0
1
typedef int itn;
struct node{
  int v,nex;
}e[107 << 1];
int head[107 << 1],cnt;
int n,k;
void init(){
  cnt = 0;
  for(int i=0;i<(107<<1);i++) head[i] = -1;
}
void add(int u,int v){
  e[cnt].v = v;
  e[cnt].nex = head[u];
  head[u] = cnt ++;
}
int siz[107];
bool vis[107];
int dp[107][107];
void dfs(int u,int fa,int dep,int pnt){
  vis[u] = 1;
  if(dep == pnt){
    siz[u] ++;
    return;
  }
  for(int i=head[u];~i;i=e[i].nex){
    int to = e[i].v;
    if(to == fa) continue;
    dfs(to,u,dep+1,pnt);
    siz[u] += siz[to];
  }
}
int main()
{
  int _ = read;
  while(_ --){
    n = read,k = read;
    init();
    for(int i=1;i<n;i++){
      int u = read,v = read;
      add(u,v);
      add(v,u);
    }
    ll ans = 0;
    if(k == 2){
      ans = n * (n - 1) / 2 % mod;
      printf("%lld\n",ans);
      continue;
    }
    for(int i=1;i<=n;i++){
      for(int j=1;j<=n;j++){
        memset(vis,0,sizeof vis);
        memset(siz,0,sizeof siz);
        memset(dp,0,sizeof dp);
        dfs(i,0,0,j);
        dp[0][0] = 1;
        int it = 0;
        for(int tj = head[i];~tj;tj=e[tj].nex){
          int to = e[tj].v;
          if(siz[to] == 0) continue;
          for(int kk=0;kk<=it;kk++){
            dp[it+1][kk] += dp[it][kk];
            dp[it+1][kk] %= mod;
            dp[it+1][kk+1] += dp[it][kk] * siz[to] % mod;
            dp[it+1][kk+1] %= mod;
          }
          it ++;
        }
        ans += dp[it][k];
        ans %= mod;
      }
    }
    printf("%lld\n",ans);
  }
    return 0;
}




目录
相关文章
|
1月前
|
人工智能 测试技术 C++
Codeforces Round 962 (Div. 3)
Codeforces Round 962 (Div. 3)
|
5月前
Codeforces Round #729 (Div. 2)
【6月更文挑战第4天】在这两个编程问题中,B. Plus and Multiply 要求判断通过加法和乘法操作数组是否能形成目标数 `n`。思路是形如 `x^a + yb = n` 的表达式,如果满足则能构造。C. Strange Function 关注的是找到最小正整数 `x` 使得 `x` 不是 `i` 的因子,计算这些值的和模 `10^9+7`。对于每个 `i`,偶数时 `f(i)` 是 3,奇数时是 2,利用因子与最大公约数计算周期性求和。
32 1
|
人工智能 算法 BI
Codeforces Round #179 (Div. 2)A、B、C、D
我们每次加进来的点相当于k,首先需要进行一个双重循环找到k点和所有点之间的最短路径;然后就以k点位判断节点更新之前的k-1个点,时间复杂度降到O(n^3),而暴力解法每次都要进行floyd,时间复杂度为O(n^4);相比之下前述解法考虑到了floyd算法的性质,更好了运用了算法的内质。
54 0
Codeforces Round #742 (Div. 2)
Codeforces Round #742 (Div. 2)
46 0
|
机器学习/深度学习 人工智能
Codeforces Round 889 (Div. 2)
Codeforces Round 889 (Div. 2)
160 0
Codeforces Round 835 (Div. 4)
Codeforces Round 835 (Div. 4) A~F题解
108 0
|
索引
Codeforces Round 817 (Div. 4)
Codeforces Round 817 (Div. 4)A~G题解
108 0
Codeforces Round 849 (Div. 4)
Codeforces Round 849 (Div. 4)A~G2题解
114 0
Codeforces Round #675 (Div. 2) A~D
Codeforces Round #675 (Div. 2) A~D
154 0