「NnOI R1-T3」元组

· · 题解

下附代码:

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=5010,mod=1e9+7;
int n,p,k;
vector<int> e[N];
int sz[N];
int f[N][N];
ll ans;

void dfs(int u,int fa) {
    sz[u]=1,f[u][0]=f[u][1]=1;
    for(int j:e[u]) {
        if(j==fa)  continue;
        dfs(j,u);
        int psz=sz[u];
        sz[u]+=sz[j];
        for(int d=min(sz[u],p);d>=1;d--)
            for(int t=max(1,d-psz);t<=min(min(k-1,d),sz[j]);t++)
                f[u][d]+=1ll*f[u][d-t]*f[j][t]%mod,
                f[u][d]%=mod;
    }
    ans+=f[u][p]; 
    ans%=mod;
}

int main() {

    scanf("%d%d%d",&n,&p,&k);
    for(int i=1;i<n;i++) {
        int a,b;
        cin>>a>>b;
        e[a].push_back(b);
        e[b].push_back(a);
    }
    dfs(1,-1);
    cout<<ans<<endl;
}

完结撒花~