rt,我以凡人之躯瞪不出来错误
#include<bits/stdc++.h>
#define ll long long
#define M 3005
using namespace std;
ll n,m,k,a,c;
ll dp[M][M];
struct line{
ll v,w;
};
vector<line> edge[M];
int dfs(ll u){
if(u>n-m)
return 1;
ll sum=0,tmp;
for(auto k : edge[u]){
tmp=dfs(k.v);
sum+=tmp;
for(ll j=sum;j>0;j--)
for(ll i=1;i<=tmp;i++)
if(j-i>=0)
dp[u][j]=max(dp[u][j],dp[u][j-i]+dp[k.v][i]-k.w);
}
return sum;
}
int main(){
cin>>n>>m;
for(ll i=1;i<=n-m;i++){
cin>>k;
for(ll j=1;j<=k;j++){
cin>>a>>c;
edge[i].push_back({a,c});
}
}
for(ll i=1;i<=m;i++)
cin>>dp[i+n-m][1];
dfs(1);
for(ll i=edge[1].size();i>=0;i--){
if(dp[1][i]>=0){
cout<<i;
break;
}
}
return 0;
}