树上背包的枚举顺序
应该如下进行,不然复杂度是假的:
for(int i=head[wh],th;i;i=e[i].next){
if((th=e[i].t)==fa)continue;
dfs(th,wh);
for(int j=0;j<=size[wh];j++){
for(int k=0;k<=size[th];k++){
check(f[wh][j+k],f[wh][j]&f[th][k]);
}
}
}
如果会影响dp值就开一个数组专门存放正确的dp值来解决混乱调用的问题。反正只有这样才能做到严格的 \(O(N^2)\) 的复杂度。
一如既往,万事胜意