树上背包
闲的没事翻全站的园子,突然看到一篇树上背包,醍醐灌顶了这下。link
其实这个东西在树上启发式合并里见过,只不过当时不知道树上背包其实就是这么写。oi-wiki 误人啊!
考虑在树上的一个普通背包问题,设 \(f_{i,j}\),实际上可以依次对子树做转移,反正就是和树上 dsu 的转移差不多:
f[i][j]=min(f[i][j],f[i][j-k]+f[son][k])
这样依次对每个儿子做转移,其时间复杂度为 \(O(nm)\)。复杂度的证明就是考虑对每个儿子的转移复杂度就是两个 \(size\) 相乘,相当于从两个树种各选一个点的复杂度,所以就是 \(O(nm)\)。