树形dp
文章平均质量分 87
CCloth
这个作者很懒,什么都没留下…
展开
-
[笛卡尔树][树形dp]Yet Another Array Counting Problem Codeforces1748E
设dp[i][j]表示i结点值取j时子树中的方案数,设l[i]表示i结点左儿子,r[i]表示i结点右儿子,若两儿子均存在,那么dp[i][j] = sum(dp[l[i]][j-1]*dp[r[i]][j]), i∈[1, m],若只有左儿子存在,那么dp[i][j] = sum(dp[l[i]][j-1]), i∈[1, m],若只有右儿子存在,那么dp[i][j] = sum(dp[r[i]][j]), i∈[1, m],若是叶子结点,那么dp[i][j]均等于1。原创 2022-12-31 23:51:27 · 826 阅读 · 0 评论 -
[记忆化搜索]Hossam and (sub-)palindromic tree Codeforces1771D
现在把这个状态转移拿到树上,设dp[i][j]表示从第i个字符到第j个字符路径上的最长回文子序列,若lca(i, j)既不是i也不是j,这时候比较简单,和线性下的一样,dp[i][j] = d[fa[i]][fa[j]]+(s[i]==s[j])*2,dp[i][j] = max(max(dp[fa[i]][j], dp[i][fa[j]]), dp[i][j]),若lca等于i或者j中的某一个,那么需要先倍增找到lca下的那个点,然后更新过程就和刚才一样了。有n个字符构成一棵树,求树上的最长回文子序列。原创 2022-12-30 23:53:34 · 803 阅读 · 0 评论 -
[树形dp]Hanging Hearts Codeforces1740E
设dp[i][0]表示不选i点时在其子树中能构成的最长子序列长度,dp[i][1]表示选i点时在其子树中能构成的最长子序列长度,可以发现,i点一定是其子树中最小的点,当选中i点后,要想非递减子序列最长,那么前面选的值必须和i点值相同,于是可以将那个最小值放在最长链的叶子结点上,这样整条链都是那个最小值了,所以dp[i][1] = i点的深度。原创 2022-11-09 10:28:19 · 267 阅读 · 0 评论 -
[树形dp]Crystalfly 2021年ICPC南京站H
之后遍历树一遍,自底向上更新dp值。如果当前点存在3秒点,那么可以先遍历第一步向哪个子节点走,最后所有情况取最大值,当确定第一步走到哪个子节点后,第二步肯定要返回父节点,第三步选择哪个3秒点其实也是固定的,肯定选择具有最大点权的那个3秒点,这里把不同3秒点的贡献列出来就很容易发现了。给出一棵有n个点的树,树上每点权值为ai,每个点还有一个暂存时间ti,当走到某点i时,其所有相邻结点开始计时,当时间达到相邻点的暂存时间后,相邻点的权值就会消失变成0,问从点1出发,能够获得的最大权值。原创 2022-11-03 21:43:09 · 604 阅读 · 0 评论 -
[树形dp]Weight the Tree Codeforces1646D
首先需要想到相邻两点不可能同时被记为good点,这样这道题目就有点像经典树形dp题——没有上司的舞会了,设状态dp[i][0/1]表示在以i为根的子树中且i点不是good点/i点是good点的最大总good点数,为了统计最终方案还需要记录dp2[i][0/1],dp2[i][0/1]表示在以i为根的子树中且i点不是good点/i点是good点的总权重最小值。最后特判一下n == 2的情况,因此此时不符合前面说的相邻两点间只有一个点能是good点。原创 2022-10-23 09:33:27 · 282 阅读 · 0 评论 -
[树形dp]Orgrimmar 2022杭电多校第8场 1008
最终答案就是dp[1][1][1],dp[1][1][0],dp[1][0][1]和dp[1][0][0]中的最大值,各点初始化是dp[i][1][0] = dp[i][1][1] = 1,dp[i][0][0] = dp[i][0][1] = 0。给出一棵树,从树中选出一个点集,要求该点集生成的子图各连通块大小最大为2,问这样的点集最大的size大小。...原创 2022-08-12 12:10:08 · 283 阅读 · 0 评论 -
[树形dp]Maex 2022杭电多校第6场 1006
根据样例模拟一下可知,只有从根节点到某个叶子结点路径上的点才会对答案有贡献,而且这个贡献值一定是该点子树中点的个数,可以设状态dp[i]表示在以i为根的子树中得到的b加和最大值,显然初始状态也就是叶子结点的dp值为1,之后当前结点now的dp值可以由子结点dp值加上子树中点个数得到,显然我们应该选取dp值最大的那个子结点,最后答案就是dp[1]。给出一棵树,树上各点都有一个点权ai,还各有一个价值bi,bi的值是点i子树中a值集合的MEX,ai的值可以为任意自然数,并且各ai值不同,求bi加和的最大值。..原创 2022-08-04 20:49:40 · 276 阅读 · 0 评论 -
[树形dp]Birds in the tree 2022牛客多校第5场 D
第二种不合法的情况是now点性别为1,并且只选了某一个子结点,其余子结点都不选,那么这时候子图中now点也成了度为1的点,而其余度为1的点性别都是0,也是不符状态含义的,可以发现如果now点选了两个及以上的子结点,此时now点就不是度为1的点了,所以它是什么性别都无所谓,dp初始化初始状态也就是叶子结点,它们如果性别为1那么dp[i][1]=1否则dp[i][0]=1,其余状态置0。...原创 2022-08-01 22:22:17 · 164 阅读 · 2 评论 -
[树形dp]Edge Groups 第46届icpc区域赛上海站G
题目描述Given an undirected connected graph of nnn vertices and n−1 edges, where nnn is guaranteed to be odd. You want to divide all the n−1 edges to (n-1)/2 groups under following constraints:There are exactly 2 edges in each group The 2 edges in the s.原创 2022-03-03 15:22:21 · 299 阅读 · 0 评论