国际惯例的题面:这题......最大连通子块和显然可以DP,加上修改显然就是动态DP了......考虑正常情况下怎么DP:我们令a[i]表示选择i及i的子树中的一些点,最大连通子块和;b[i]表示在i的子树中选择一些点(不一定包含i),最大连通子块和.那么我们要询问i的子树的话,答案就是b[i]了.考虑这个DP怎么转移,a[i]=max(sigma(j:SON_i)a[j]+v[i],0),b[i]=max((j:SON_i)b[j],a[i]).陈俊锟说过,树上动态DP,就是把树拆成链,分离轻…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5210 似乎像bzoj4712一样,依然可以用别的方法做.但还是只写了动态DP. 当然是dp[ ][0/1]表示选/不选自己这个点的最大值. 本来想生硬地弄一个矩阵,但发现时间可能不太好,因为是3×3的矩阵,有27倍的时间. 用g[ ][0/1]表示dp的除去重儿子的意义.那么dp[ ][1]就是自己的g[ ][1]加上重链里的靠近自己的一段g[ ][1],线段树上表现为g[1]的最大前缀:…
LINK:Decompose 看起来很难 实际上也很难 考验选手的dp 树链剖分 矩阵乘法的能力. 容易列出dp方程 暴力dp 期望得分28. 对于链的情况 容易发现dp方程可以转矩阵乘法 然后利用线段树维护矩阵即可. 这个矩阵很容易列出这里不再赘述. 对于100分 容易想到动态dp模型 LCT写动态dp是万万不能的. 而且这道题的dp方程和其他儿子也有些关系. 考虑树链剖分 然后分别计算轻儿子和重儿子的贡献. 让重儿子利用矩阵来进行转移 轻儿子当做常数. 这样每次修改的时候 修改的节点最多只有…
动态$dp$好题 考虑用树链剖分将整棵树剖成若干条链. 设x的重儿子为$son[x]$,设$x$所在链链头为$top[x]$ 对于重链上的每个节点(不妨设该节点编号为$x$)令$f[x]$表示以$x$为根的子树内(除以$son[x]$为根的子树),包含节点$x$的联通块的最大权值和. 我们求出一条重链上每个节点的f值后,考虑如何求出以$top[x]$为根的子树内的最大联通快. 我们考虑用线段树来合并每一个f值.我们用线段树维护四个值: $sum$,该区间内所有$f$值的总和 $suml$,以该区…
题目描述 小A走到一个山脚下,准备给自己造一个小屋.这时候,小A的朋友(op,又叫管理员)打开了创造模式,然后飞到 山顶放了格水.于是小A面前出现了一个瀑布.作为平民的小A只好老实巴交地爬山堵水.那么问题来了:我们把这 个瀑布看成是一个n个节点的树,每个节点有权值(爬上去的代价).小A要选择一些节点,以其权值和作为代价将 这些点删除(堵上),使得根节点与所有叶子结点不连通.问最小代价.不过到这还没结束.小A的朋友觉得这样 子太便宜小A了,于是他还会不断地修改地形,使得某个节点的权值发生变化.不过…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5210 题解 令 \(dp[x][0]\) 表示以 \(x\) 为根的子树中的包含 \(x\) 的连通块的点权和最大值,\(dp[x][1]\) 为 \(x\) 的所有孩子中的子树的连通块点权和最大值. 于是有这样的式子: \[ dp[x][0] = \max(w_x+\sum_{y\in child_x} dp[y][0], 0)\\dp[x][1] = \max_{y\in child_x…
[HDU 5293]Tree chain problem(树形dp+树链剖分) 题面 在一棵树中,给出若干条链和链的权值,求选取不相交的链使得权值和最大. 分析 考虑树形dp,dp[x]表示以x为子树的最大权值和(选的链都在i的子树中) 设sum[x]表示x的儿子的dp值和,即\(\sum _{y \in \mathrm{son}(x)} dp[y]\) 1.不选两端点lca为x的链,dp[x]=sum[x] 2.选两端点lca为x的链,则dp[x]=max{链的权值+链上节点的所有子节点dp的…
Description Solution 神仙操作orz. 首先看数据范围,显然不可能是O(n2)的.(即绝对不是枚举那么简单的),我们考虑dp. 定义f(x,k)为以x为根的子树中与x距离为k的节点数:g(x,k)为在以x为根的子树中选择两个点,使得另一个点应在x子树外且离x距离为k的方案数(或者距离为0).但是这样子暴力转移怕是会崩em,考虑优化. 这里的树是棵静态树,考虑树链剖分,点分治之类的思想. 最后,由于很多时候它的复杂度和树的高度有关,考虑长链剖分. 转移的话,暴力枚举所有轻链(啊…
参考:https://www.cnblogs.com/CQzhangyu/p/8632904.html 要开longlong的 首先看dp,设f[u]为必选u点的子树内最大联通块,p[u]为不一定选u的子树内最大联通块,转移很显然就是f[u]=max(Σf[v],0),p[u]=max(max(p[v]),f[u]) 然后看动态的部分,设g是不算重儿子的f,然后每条链上的真实f值要用一棵线段树维护g来得到,具体形式是f[u]=max(g[v]+f[hs[v]],0),是一个最长连续子序列的形式,…
[BZOJ5210]最大连通子块和 Description 给出一棵n个点.以1为根的有根树,点有点权.要求支持如下两种操作: M x y:将点x的点权改为y: Q x:求以x为根的子树的最大连通子块和. 其中,一棵子树的最大连通子块和指的是:该子树所有子连通块的点权和中的最大值 (本题中子连通块包括空连通块,点权和为0). Input 第一行两个整数n.m,表示树的点数以及操作的数目. 第二行n个整数,第i个整数w_i表示第i个点的点权. 接下来的n-1行,每行两个整数x.y,表示x和y之间有…