树上背包

这应该是一道树上背包裸题吧。

众所周知,树上背包的朴素\(DP\)是\(O(nm^2)\)的。

但对于这种体积全为\(1\)的树上背包,我们可以通过记\(Size\)优化转移时的循环上界,做到\(O(nm)\)的。

呃,复杂度为什么是这样的我也很迷,证明我也不会啊。。。

代码

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 100000
#define NK 10200000
#define LL long long
#define add(x,y) (e[++ee].nxt=lnk[x],e[lnk[x]=ee].to=y)
#define min(x,y) ((x)<(y)?(x):(y))
#define Gmax(x,y) ((x<(y))&&(x=(y)))
using namespace std;
int n,m,ee,a[N+5],lnk[N+5];struct edge {int to,nxt;}e[N<<1];
class FastIO
{
private:
#define FS 100000
#define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)
#define tn (x<<3)+(x<<1)
#define D isdigit(c=tc())
char c,*A,*B,FI[FS];
public:
I FastIO() {A=B=FI;}
Tp I void read(Ty& x) {x=0;W(!D);W(x=tn+(c&15),D);}
}F;
class TreeDper//树上背包
{
private:
int g[N+5];LL *f[N+5],_f[NK+5];
I void DP(CI x)
{
for(RI i=(g[x]=1,lnk[x]),j,k,lim1,lim2;i;i=e[i].nxt)//枚举儿子
for(DP(e[i].to),g[x]+=g[e[i].to],j=min(g[x],m);~j;--j)//记Size优化转移
for(k=min(g[e[i].to],m-j);k;--k) Gmax(f[x][j+k],f[x][j]+f[e[i].to][k]);//记Size优化转移
Gmax(f[x][1],a[x]);//选自己
}
public:
I void Solve()
{
RI i,j;LL ans=0;for(i=1;i<=n;++i) f[i]=&_f[(i-1)*(m+1)+1];//题目中没给出n,k具体范围,只能用指针了
for(DP(1),i=1;i<=m;++i) Gmax(ans,f[1][i]);printf("%lld",ans);//输出答案
}
}T;
int main()
{
freopen("b.in","r",stdin),freopen("b.out","w",stdout);
RI i,x;for(F.read(n),F.read(m),++m,i=2;i<=n;++i) F.read(x),F.read(a[i]),add(x,i);
return T.Solve(),0;
}

【2019.8.9 慈溪模拟赛 T2】摘Galo(b)(树上背包)的更多相关文章

  1. 【2019.8.15 慈溪模拟赛 T2】组合数(binom)(卢卡斯定理+高维前缀和)

    卢卡斯定理 题目中说到\(p\)是质数. 而此时要求组合数向质数取模的结果,就可以用卢卡斯定理: \[C_x^y=C_{x\ div\ p}^{y\ div\ p}\cdot C_{x\ mod\ p ...

  2. 【2019.8.6 慈溪模拟赛 T2】树上路径(tree)(Trie)

    从暴力考虑转化题意 考虑最暴力的做法,我们枚举路径的两端,然后采用类似求树上路径长度的做法,计算两点到根的贡献,然后除去\(LCA\)到根的贡献两次. 即,设\(v_i\)为\(i\)到根路径上的边权 ...

  3. 【2019.8.7 慈溪模拟赛 T2】环上随机点(ran)(自然算法)

    简单声明 我是蒟蒻不会推式子... 所以我用的是乱搞做法... 大自然的选择 这里我用的乱搞做法被闪指导赐名为"自然算法",对于这种输入信息很少的概率题一般都很适用. 比如此题,对 ...

  4. 【2019.8.8 慈溪模拟赛 T2】query(query)(分治+分类讨论)

    分治 首先,我们考虑分治处理此问题. 每次处理区间\([l,r]\)时,我们先处理完\([l,mid]\)和\([mid+1,r]\)两个区间的答案,然后我们再考虑计算左区间与右区间之间的答案. 处理 ...

  5. 【2019.8.12 慈溪模拟赛 T2】汪哥图(wang)(前缀和)

    森林 考虑到题目中给出条件两点间至多只有一条路径. 就可以发现,这是一个森林. 而森林有一个很有用的性质. 考虑对于一棵树,点数-边数=\(1\). 因此对于一个森林,点数-边数=连通块个数. 所以, ...

  6. 【2019.8.14 慈溪模拟赛 T2】黑心老板(gamble)(2-SAT)

    \(2-SAT\) 考虑每个点只能选择\(R\)或\(B\),可以看作选\(0\)或\(1\). 然后对于给出的关系式,若其中一个位置满足关系式,另两个位置就必须不满足关系式,这样就可以对于每个关系式 ...

  7. 【2019.8.11下午 慈溪模拟赛 T2】数数(gcd)(分块+枚举因数)

    莫比乌斯反演 考虑先推式子: \[\sum_{i=l}^r[gcd(a_i,G)=1]\] \[\sum_{i=l}^r\sum_{p|a_i,p|G}\mu(p)\] \[\sum_{p|G}\mu ...

  8. 【2019.8.11上午 慈溪模拟赛 T2】十七公斤重的文明(seventeen)(奇偶性讨论+动态规划)

    题意转化 考虑我们对于集合中每一个\(i\),若\(i-2,i+k\)存在,就向其连边. 那么,一个合法的集合就需要满足,不会存在环. 这样问题转化到了图上,就变得具体了许多,也就更容易考虑.求解了. ...

  9. 【2019.8.15 慈溪模拟赛 T1】插头(plugin)(二分+贪心)

    二分 首先,可以发现,最后的答案显然满足可二分性,因此我们可以二分答案. 然后,我们只要贪心,就可以验证了. 贪心 不难发现,肯定会优先选择能提供更多插座的排插,且在确定充电器个数的情况下,肯定选择能 ...

随机推荐

  1. 3. 语法"陷阱"

    1. C运算符优先级 运算符(优先级从高到低) 结合律 ++(后置).--(后置).()(函数调用).[].{}.(复合字面量).. .-> 从左往右 ++(前置).--(前置).-.+.~.! ...

  2. Paper | Deep Mutual Learning

    目录 1. 动机详述和方法简介 2. 相关工作 3. 方法 3.1 Formulation 3.2 实现 3.3 弱监督学习 4. 实验 4.1 基本实验 4.2 深入实验 [算法和公式很simple ...

  3. python做中学(一)全局变量的用法

    一段时间没有使用python来写代码,就发现以前学习的很多语法都忘了.看来还是当初这方面的项目做的好不够多,没有系统性的运用和学习,导致了很多语法不能顺手拈来.在接下来的这个项目中, 一定要把遇到的一 ...

  4. vue 开发常见问题解决大全

    vue添加favicon.ico,包含开发环境和生产环境显示. 1.把图标放在下项目的根目录.. 2.修改build文件夹下面的webpack.dev.conf.js(开发环境) 和webpack.p ...

  5. 安装 Java

    1.rpm下载地址 https://download.oracle.com/otn/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm?AuthParam=1570520 ...

  6. Idea导出jar包运行报错:找不到主清单属性解决方法

    解决方法 1.打开项目结构 2.创建一个Artifact 3.设置 我这里使用的maven,所以有resources文件夹 4.创建lib文件夹 右键output diretory,选择创建文件夹,名 ...

  7. Shell(2)—数组

    Shell(2)-数组 常用的 Bash Shell 只支持一维数组,不支持多维数组. 一.概念 Shell 并且没有限制数组的大小,理论上可以存放无限量的数据.Shell 数组元素的下标也是从 0 ...

  8. 通过SSH通道来访问MySQL

     许多时候当要使用Mysql时,会遇到如下情况: 1. 信息比较重要,希望通信被加密.2. 一些端口,比如3306端口,被路由器禁用. 对第一个问题的一个比较直接的解决办法就是更改mysql的代码,或 ...

  9. JavaScript 错误异常

    JavaScript 错误异常 错误异常语句 try 语句测试代码块中的错误 catch 语句处理错误 throw 语句允许自定义错误 finally 语句在错误异常语句后,必须执行的代码块 try ...

  10. 2019年上半年收集到的AI计算机视觉方向干货文章

    2019年上半年收集到的AI计算机视觉方向干货文章 时光飞逝,一晃上半年快要结束了.对人工智能高度感兴趣的笔者,每天都要看不少人工智能方面的文章,很多是干货文章,受益匪浅,所以整理成这个系列的文章. ...