void dp(int x) { int l=son[x].size(); for(int i=0;i<l;++i){ int y=son[x][i]; dp(y); for(int t=m;t>=1;t--) for(int j=t;j>=1;j--){ f[x][t]=max(f[x][t],f[x][t-j]+f[y][j]); } } if(x!=0) for(int t=m;t>0;t--) f[x][t]=f[x][t-1]+c[x]; }