rt,#8一直过不去WA,求大佬调
好像试了几下是因为乘积相乘然后乘炸了?
#include <bits/stdc++.h>
using namespace std;
const long long maxn=1e5+5,mod=1e9+7;
int n,K,dp[maxn][105][2][2],sz[maxn];
long long tmp[105][2][2];
vector<int> e[maxn];
void dfs(int u,int fa)
{
sz[u]=1;
dp[u][0][0][0]=dp[u][1][1][0]=1;
for(int i=0;i<e[u].size();i++)
{
int v=e[u][i];
if(v==fa)
continue;
dfs(v,u);
for(int j=0;j<=min(K,sz[u]);j++)
{
tmp[j][0][1]=dp[u][j][0][1];dp[u][j][0][1]=0;
tmp[j][0][0]=dp[u][j][0][0];dp[u][j][0][0]=0;
tmp[j][1][1]=dp[u][j][1][1];dp[u][j][1][1]=0;
tmp[j][1][0]=dp[u][j][1][0];dp[u][j][1][0]=0;
}
for(int j=0;j<=min(K,sz[u]);j++)
for(int k=0;k<=min(K,sz[v]);k++)
{
if(j+k>K)
break;
// int temp=1ll*tmp[j][0][0]*dp[v][k][0][1]%mod;
dp[u][j+k][0][0]+=1ll*tmp[j][0][0]*dp[v][k][0][1]%mod;
dp[u][j+k][0][0]%=mod;
dp[u][j+k][1][0]+=1ll*tmp[j][1][0]*(1ll*dp[v][k][0][0]+1ll*dp[v][k][0][1])%mod;
dp[u][j+k][1][0]%=mod;
dp[u][j+k][0][1]+=1ll*tmp[j][0][1]*(1ll*dp[v][k][0][1]+1ll*dp[v][k][1][1])%mod;
dp[u][j+1][0][1]%=mod;
dp[u][j+k][0][1]+=1ll*tmp[j][0][0]*dp[v][k][1][1]%mod;
dp[u][j+k][0][1]%=mod;
dp[u][j+k][1][1]+=1ll*tmp[j][1][1]*(1ll*dp[v][k][0][0]+1ll*dp[v][k][0][1]+1ll*dp[v][k][1][0]+1ll*dp[v][k][1][1])%mod;
dp[u][j+k][1][1]%=mod;
dp[u][j+k][1][1]+=1ll*tmp[j][1][0]*(1ll*dp[v][k][1][0]+1ll*dp[v][k][1][1])%mod;
dp[u][j+k][1][1]%=mod;
}
sz[u]+=sz[v];
}
}
int main()
{
cin >>n>>K;
for(int i=1;i<n;i++)
{
int x,y;
cin >>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
dfs(1,0);
cout <<(dp[1][K][1][1]+dp[1][K][0][1])%mod<<endl;
return 0;
}