```cpp
inline void dfs(int u){
if (vis[u]) return;
vis[u]=1;
for (int i=W[u];i<=m;i++) f[u][i]=V[u];
for (int i=Head[u];~i;i=e[i].Next){
int v=e[i].to;
dfs(v);
for (int j=m-W[u];~j;j--)// W[u]>m 时会炸
for (int k=0;k<=j;k++)
f[u][j+W[u]]=max(f[u][j+W[u]],f[v][k]+f[u][j+W[u]-k]);
}
}
```
改成
```cpp
inline void dfs(int u){
if (vis[u]) return;
vis[u]=1;
for (int i=W[u];i<=m;i++) f[u][i]=V[u];
for (int i=Head[u];~i;i=e[i].Next){
int v=e[i].to;
dfs(v);
if(W[u]<=m)for (int j=m-W[u];~j;j--)
for (int k=0;k<=j;k++)
f[u][j+W[u]]=max(f[u][j+W[u]],f[v][k]+f[u][j+W[u]-k]);
}
}
```
by Perfound @ 2021-11-17 21:23:21
@[Perfound](/user/535259) 谢谢您了
by Sakuya_maid @ 2023-10-07 12:13:32