树形背包板子

int n,m;
vector<pii>e[M];
int c[M];
int f[3005][3005];
void init(){
    rep(i,0,3000)
    rep(j,0,3000)
    f[i][j]=-inf;
}
int dfs(int u){
    if(u>n-m){
        f[u][1]=c[u];
        return 1;
    }
    int siz=0,g;
    for(auto[v,w]:e[u]){
        g=dfs(v);
        siz+=g;
        for(int j=siz;j>0;j--){
            for(int k=1;k<=min(j,g);k++){
                f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]-w);
            }
        }
    }
    return siz;
}
void solve(){
    cin>>n>>m;
    rep(i,1,n-m){
        int k;cin>>k;
        rep(j,1,k){
            int v,w;cin>>v>>w;
            e[i].pb({v,w});
        }
    }
    init();
    rep(i,1,n)f[i][0]=0;
    rep(i,n-m+1,n){
        cin>>c[i];
    }
    dfs(1);
    for(int i=3000;i>=0;i--){
        if(f[1][i]>=0){
            cout<<i;return;
        }
    }
}
posted @ 2025-12-02 11:11  Marinaco  阅读(0)  评论(0)    收藏  举报
//雪花飘落效果