树上背包的枚举顺序

应该如下进行,不然复杂度是假的:

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)\) 的复杂度。

posted @ 2022-06-29 14:18  Feyn618  阅读(24)  评论(0编辑  收藏  举报