样例没过,,
但我感觉我写的挺对的啊
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9+7;
const int N = 2e5+7;
int n, k;
vector<int> G[N];
ll qpow(ll a, ll b){
ll res(1);
while(b){
if(b & 1)
res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
ll fact[N];
ll inv_fact[N];
void init(){
fact[0] = inv_fact[0] = 1;
for(int i(1); i <= 2e5; ++i){
fact[i] = fact[i-1] * i % mod;
inv_fact[i] = inv_fact[i-1] * qpow(i, mod-2) % mod;
}
}
ll C(int a, int b){
return fact[a] * inv_fact[b] % mod * inv_fact[a - b] % mod;
}
int siz[N];
ll f[N];
ll sum[N];
ll g[N];
ll ans;
void dfs(int u, int pre){
siz[u] = 1;
for(int v : G[u])
if(v != pre)
dfs(v, u), siz[u] += siz[v], sum[u] = (sum[u] + sum[v]) % mod;
if(siz[u] >= k)
f[u] = siz[u] % mod * C(siz[u], k) % mod;
sum[u] = (sum[u] + f[u]) % mod;
return ;
}
void dfs1(int u, int pre){
ans = (ans + g[u]) % mod;
for(int v : G[u])
if(v != pre){
g[v] = ((g[u] - f[v]) % mod + mod) % mod;
dfs1(v, u);
}
}
void Sol(){
cin >> n >> k;
init();
for(int i(1), u, v; i < n; ++i){
cin >> u >> v;
G[u].emplace_back(v);
G[v].emplace_back(u);
}
dfs(1, 0);
g[1] = sum[1];
dfs1(1, 0);
cout << ans << ' ';
}
signed main(){
cin.tie(0) -> ios::sync_with_stdio(false);
int T = 1;
//cin >> T;
while(T--)
Sol();
return 0;
}