题目传送门 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…
国际惯例的题面:这题......最大连通子块和显然可以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,就是把树拆成链,分离轻…
动态$dp$好题 考虑用树链剖分将整棵树剖成若干条链. 设x的重儿子为$son[x]$,设$x$所在链链头为$top[x]$ 对于重链上的每个节点(不妨设该节点编号为$x$)令$f[x]$表示以$x$为根的子树内(除以$son[x]$为根的子树),包含节点$x$的联通块的最大权值和. 我们求出一条重链上每个节点的f值后,考虑如何求出以$top[x]$为根的子树内的最大联通快. 我们考虑用线段树来合并每一个f值.我们用线段树维护四个值: $sum$,该区间内所有$f$值的总和 $suml$,以该区…
题目: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]的最大前缀:…
传送门 题意:支持单点修改,维护子树里的最大连通子块和. 思路: 扯皮: bzojbzojbzoj卡常差评. 网上的题解大多用了跟什么最大子段和一样的转移方法. 但是我们实际上是可以用矩阵转移的传统ddpddpddp写法来做这道题的. 由于我推出来矩阵是3∗33*33∗3的因此常数巨大gggggg了,因此蒟蒻博主只能提供思路和一份TLETLETLE的代码. 正题: 一道考虑链分治+dpdpdp套路题. 同样先考虑静态的版本. 显然可以fi,0/1f_{i,0/1}fi,0/1​表示以iii为根的…
卡了一晚上,经历了被卡空间,被卡T,被卡数组等一堆惨惨的事情之后,终于在各位大爹的帮助下过了这个题qwqqq (全网都没有用矩阵转移的动态dp,让我很慌张) 首先,我们先考虑一个比较基础的\(dp\) 我们令\(dp1[i]\)表示必须选\(i\)的最大连通块的权值是多少. 然后令\(ans1[i]\)表示\(i\)的子树中的\(dp1\)的最大值. 那么该怎么计算这两个数组呢. 首先$$dp1[i] = dp1[i]+max(0,dp1[p])$$ 其中\(p\)是\(i\)的儿子. \[an…
题目分析: 解决了上次提到的<切树游戏>后,这道题就是一道模板题. 注意我们需要用堆维护子重链的最大值.这样不会使得复杂度变坏,因为每个重链我们只考虑一个点. 时间复杂度$O(nlog^2n)$ 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; ; int n,m; int v[maxn]; vector<int> g[maxn]; int fa[maxn],dep[maxn],…
题解: 考虑朴素的dp:$$f_{u} = max(\sum_{v} f_{v} + w_{u} , 0)  \ \ \ \ h_{u} = max( max_{v} \{ h_{v} \}  , h_{u} )$$ 考虑利用树剖修改:记$son_{u}$为$u$的重儿子,$g_{u}$为$u$所有轻儿子之和加$w_{u}$: 方程变成: $g_{u} = w_{u} +  \sum_{v!=son_{u}} f_{v}  $ $f_{u}  = max(f_{son_{u}}+ g_{u} ,…
[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之间有…
题目描述 给出一棵n个点.以1为根的有根树,点有点权.要求支持如下两种操作: M x y:将点x的点权改为y: Q x:求以x为根的子树的最大连通子块和. 其中,一棵子树的最大连通子块和指的是:该子树所有子连通块的点权和中的最大值 (本题中子连通块包括空连通块,点权和为0). 输入 第一行两个整数n.m,表示树的点数以及操作的数目. 第二行n个整数,第i个整数w_i表示第i个点的点权. 接下来的n-1行,每行两个整数x.y,表示x和y之间有一条边相连. 接下来的m行,每行输入一个操作,含义如题目…