这题有n^2的答案,而且更好写,我从隔壁金明那学成归来
void dfs(int x){ for(int i=head[x];i;i=e[i].next1){ for(int k=m-1;k>=0;k--) dp[e[i].y][k]=dp[x][k]+v[e[i].y]; dfs(e[i].y); for(int k=m;k>=1;k--) dp[x][k]=max(dp[x][k],dp[e[i].y][k-1]); } }