随笔分类 - 动态规划--树形DP
摘要:$n \leq 250000$的树有边权,每次问:使$k$个点无法到达根节点至少要割边权总和多少的边。$k$总和$\leq 500000$。 虚树模板。 1 //#include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 //#includ
阅读全文
摘要:$n \leq 2000$的树,问从原点出发把每条边走至少一次再回到原点最少代价,有边权。其中可以使用$k$次传送门,始末位置不限,一次代价为$c$。 如果没有$k$的话直接每条边走两次。由于传送一次相当于一条链不用走,搞出来应该是求$k$条边不相交链的最大权和(相交的话,相交部分走了两次,相当于没
阅读全文
摘要:$n \leq 500000$的树,开始有一个点是坏的,如果一个子树中坏点比例(不包括根节点)超过x那这整棵子树就会变坏,问最坏情况下不超过$K$个坏点的情况下$x$最小是多少。 被坑成傻逼。。 可以发现最坏情况下一开始的坏点一定是某个叶子。 首先容易看出的做法是二分完直接dp一次验证是否超过$K$
阅读全文
摘要:n<=500的树上有点权(有正负),选若干个点使点权和>=X(<=1e6)并且相邻点的对数最多,输出相邻点最多多少对。 在n个点里选某权和的最多相邻点->在n个点里选某数量的相邻点使权和最大 f(i,j,0/1)--子树i中选j对相邻关系,不选/选择节点i的最大权和, 就是个背包嘛。不过注意一下背包
阅读全文
摘要:n<=300000个点的树,给m<=300000条带权路径(ui,vi,保证vi是ui的祖先)求覆盖整棵树每条边的最小权和。 好题好姿势!直观的看到可以树形DP,f[i]表示把点i包括它爸爸下面那条边都覆盖的最小权,就用经过他爸爸那条边的所有路径,各条路径加上一些子树信息来更新即可。 这样时间炸,那
阅读全文
摘要:n<=100个点的根为1的二叉树,树边上有苹果,求保留Q<=n条边的最多苹果数。 树形DP,f[i][j]--节点i为根的子树保留j条边最优方案,f[i][0]=0,f[i][j]=max(f[lc[i]][k-1]+f[rc[i]][j-k-1]+v[lc[i]]+v[rc[i]]),这是左右都选
阅读全文
摘要:n<=50000个点的树,求选最多不相邻点的个数。 f[i][0]=sigma max(f[j][0],f[j][1]),j为i的儿子 f[i][1]=sigma f[j][0],j同上 死于未初始化。不要歧视水题。 1 #include<cstdio> 2 #include<cstring> 3
阅读全文

浙公网安备 33010602011771号