首页 > 其他分享 >树上背包

树上背包

时间:2024-04-25 17:13:25浏览次数:17  
标签:sz 背包 int 合并 -- 树上 dp

就是在树上做背包, 通常把子树的最优值当成一个一个元素, 合并他们。

\(u \to v\) 的边。

收集型伪代码

for(int i = sz[u]; ~i; i--){
	for(int j = min(sz[v], i); ~j; j--){
		dp[u][i] = max(dp[u][i], dp[u][i - j] + dp[v][j]);
	}
}

扩散型伪代码

for(int i = sz[u]; ~i; i--){
	for(int j = sz[v]; ~j; j--){
		dp2[i + j] = max(dp2[i + j], dp[u][i] + dp[v][j])
	}
}

题目 luogu P1273

直接写合并时间复杂度看似是 \(O(n^3)\), 实则是 \(O(n^2)\)。

如果每一次合并都是有效的, 操作可以看做是从两个子树取出两个叶子节点合并, 最多有 \(n^2\) 次合并, 所以时间复杂度为 \(O(n^2)\)。

标签:sz,背包,int,合并,--,树上,dp
From: https://www.cnblogs.com/liuyichen0401/p/18158112

相关文章

  • 树上最小点覆盖的一类问题
    前言关于下文中\(lim\)较小的最小点覆盖问题,我们通常会对每个节点设出若干状态转移,而下文所说的问题是此问题的通解,但复杂度为平方级别题意给定一棵无根有权树,每个点建消防站都有一定代价\(c\),每个点都有一个限制\(lim\),表示离它最近的消防站的最大距离。求让所有点安全的......
  • [BZOJ4358]permu树上莫队
    先放代码晚上补(争取)#include<bits/stdc++.h>#definefo(x,y,z)for(int(x)=(y);(x)<=(z);(x)++)#definefu(x,y,z)for(int(x)=(y);(x)>=(z);(x)--)typedeflonglongll;usingnamespacestd;inlineintqr(){ charch=getchar();intx=0,f=1; for(;ch<&......
  • (复习)树上启发式合并(dsu on tree)入门U41492树上数颜色
    主要思想是树的重轻儿子之分使得时间复杂度为o(nlogn),神奇欲深入了解的这里:https://oi-wiki.org/graph/dsu-on-tree/点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedefstructedge//边结构体{intto,next;}EDGE;//边相关数组EDGEe[100001<<1];......
  • 贡献法之求树上上任意两点间的路径之和
    一图胜千言开始造火箭虽然我们可以求出,总共的dis(i,j),但分散到每一个小dis(i,j),由于存在向上取整操作,我们需要求出将每一个小dis(i,j)给补成k的倍数的补数之和!此处我们采用树形dp。dp[u][j]表示以u的子节点到根节点root的距离对k取余的值为j的点的个数我们如何求树上任意两......
  • 背包(笔记合集)
    一般代码只是例子,具体使用依据题目来,DP是一种思想,代码都以属性为最大值等等为例子01背包最基本的背包简单说就是有n个物品和容量为m的包,求其max/min/方案数等等即属性一般转移方程为f[i][j]意思为在前i个里容量为j的情况下的要求的属性(可忽略)一般这里的转移是在f[i][j],......
  • P9745 「KDOI-06-S」树上异或
    P9745「KDOI-06-S」树上异或位运算trick+树形dp看到题目中贡献的计算,可以想到乘法分配律,也就是一个连通块的乘积可以直接乘在当前所有方案的权值之和上。可以考虑特殊性质:链。那么树的问题就变成了序列问题。容易设\(f_i\)表示\(i\)以前的节点的所有断边方案权值和。转移......
  • 树上点差分的经典应用 LuoguP3258松鼠的新家
    树上点差分的核心就是如何避免重复,即正确的运用差分数组例如a,b点路径上点权值加1,则把a,b路径找到,并找到其LCA,此时可以把a到根,b到根这两条路径看出两条链,把每条链看出我们熟悉的顺序差分结构.以其中一条链为例子,把a当成数组的起点,根当成数组的末尾,进行差分,显然有C[a]+......
  • [学习笔记] 树上差分 - 图论
    前置知识:树,LCA,前缀和与差分边差分这个名字是在网上看到的,不理解为什么要叫这么一个名字,可能是因为它与树链修改有关。当然,用于树链修改单点查询非常方便~看这个图,该图是以点1为根进行DFS的。如果我们要把从3->4这条树链上所有的点统统加上1,可以都转化为对到根节点的......
  • 树上科技
    byTheBigYellowDuck重链剖分取preferred-son为子树大小最大的儿子,是为重链剖分。一条最重要的性质:每个点到根路径上的轻重边切换次数为\(\logn\)级别,也就是每经过一条轻边,子树大小至少除以二。这一点为很多基于重链剖分的暴力提供了复杂度保证。P2486[SDOI2011]染色......
  • OR-TOOL 背包算法
    起因:最近公司要发票自动匹配,比如财务输入10000W块,找到发票中能凑10000的。然后可以快速核销。 废话不多, 一官方文档https://developers.google.cn/optimization/pack/knapsack?hl=zh-cn 二POM文件<!--google算法包--><dependency><......