摘要: 题目 传送门 思路 很容易就能将其转换成一个树上的问题, 这道题的题面就已经有一点像背包问题了,但是如果直接用背包的话,时间复杂度就会卡在容量那一层 所以我们换一种思路$dp[i][j][0/1]$表示以i为根节点的子树,买了j个物品,i是否使用优惠券,所使用的的最小金额 这个转移相信读者都会,下面 阅读全文
posted @ 2020-07-31 12:43 loney_s 阅读(102) 评论(0) 推荐(0)
摘要: 题目 传送门 思路 这道题的难点主要在于模型的转换 我们首先考虑一颗树的如果有唯一最大匹配会满足什么条件 每一个叶子是一个被匹配到的(这应该不难证明吧) 接着我们考虑将每一对匹配的节点删去,那么最后一定不会剩下任何节点(你可以平移的思想去证明) 当然,还是有唯一的例外的,这个树只有一个节点 接着我们 阅读全文
posted @ 2020-07-31 12:36 loney_s 阅读(139) 评论(0) 推荐(0)
摘要: 题目 传送门 思路 我们考虑交换两个子树的访问顺序会导致什么 设$w[i]$为以i为根节点的子树内部所有的边权和加上i到i的父亲的边权 设$siz[i]$为以i为根节点的子树内部有多少个点 如果i在j前面,所提供的的多的贡献为 \(w[i]*siz[j]\) 如果j在i前面,所提供的的多的贡献为 \ 阅读全文
posted @ 2020-07-31 12:28 loney_s 阅读(128) 评论(0) 推荐(0)
摘要: 题目 传送门 思路 我们考虑即使是枚举路径也是$n^2$级别的复杂度 所以我们反过来考虑每一个点的贡献是什么 情况1 这个点直接连向儿子节点 此时的计算即为$siz[u]*val[u]$ 情况2 考虑子树内的一条链跨过他到了子树内的另一点 这个时候也是比较好算的,我们只需要知道每一个点到他的时候, 阅读全文
posted @ 2020-07-31 12:24 loney_s 阅读(152) 评论(0) 推荐(0)
摘要: 题目 传送门 思路 一个括号其实就相当于一个子树 也就是这是一个树形DP的题 这题的难点也在于转换,DP并不是很难 $dp[i][j][0/1]\(表示以i为根节点的子树,用了j的\)-/+$之后的最大/最小值 用类似于背包的方程去转移其即可 代码 #include<iostream> #inclu 阅读全文
posted @ 2020-07-31 12:15 loney_s 阅读(120) 评论(0) 推荐(0)
摘要: 题目 传送门 思路 算法一 直接暴力进行求解,时间复杂度$O(n^2log_n)$ 看上去很大,其实可以直接过,给的代码也是这个暴力的代码 算法二 口胡警告 我们考虑一个LIS一定会跨过某一个子树的根节点 所以我们考虑设$dp1[i][j]$表示以以i为根节点的子树,可以跨过i节点与其他序列组合的上 阅读全文
posted @ 2020-07-31 11:57 loney_s 阅读(172) 评论(0) 推荐(0)
摘要: 题目 传送门 思路 跟距离相关的多半要将距离加入DP状态的定义之中 我们设$dp[i][j]$表示以i为根节点的子树距离i最近的选的点的距离大于j的最小权值 我们可以考虑枚举两个儿子来构造距离大于k的情况, 注意距离要从0开始,毕竟要要将i考虑进DP里面 代码 #include<iostream> 阅读全文
posted @ 2020-07-31 11:52 loney_s 阅读(107) 评论(0) 推荐(0)
摘要: 题目 传送门 思路 比较有意思的一种对树的直径的利用 我们考虑每一次染色的时候,最优方案的每一次染色一定会将一个颜色相同的联通块全部都翻转颜色, 接着我们考虑缩点,缩完点之后,连着的两个节点一定是颜色不一样的 我们考虑缩完点之后的数的直径,我们将直径的中心节点提起来当根, 这颗树深度一样的点的颜色一 阅读全文
posted @ 2020-07-31 11:35 loney_s 阅读(120) 评论(0) 推荐(0)
摘要: 题目 传送门 思路 算是比较明显的一个树DP 设$dp_i$表示遍历以i为根节点的子树能吃的最多的海狸 合并儿子节点的DP值只需要累加就可以了 注意可能有根节点海狸不够的情况,所以我们还要把儿子节点的DP值排个序 但是注意,这里并不保证i号节点的海狸被吃完了,所以转移的时候我们需要将这个因素考虑进去 阅读全文
posted @ 2020-07-31 11:30 loney_s 阅读(141) 评论(0) 推荐(0)
摘要: 题目 传送门 思路 因为颜色是无限的,我们可以轻松的转换一下题目 对于一个点,我们选取与他相连的k个点,并且将边权作为贡献 有了这个之后,我们考虑单纯的考虑一个子树是不行的,毕竟根节点与父亲也可能有关系 所以我们将这种情况加入$dp$状态的设计中来 设$dp[i][0/1]$表示以i为根节点的子树, 阅读全文
posted @ 2020-07-31 11:26 loney_s 阅读(141) 评论(0) 推荐(0)
摘要: 题目 传送门 思路 我们考虑一个联通块的情况实际上只取决于他的最大值和最小值 所以我们考虑哪一个点作为最大值,之后设$dp[i]$为以i为根节点的子树有多少种符合方案的情况 转移即为$dp[i]=\prod_{v\in son} (dp[v]+1)$ 很明显,这一定会有重复的方案出现 所以我们强行规 阅读全文
posted @ 2020-07-31 11:20 loney_s 阅读(141) 评论(0) 推荐(0)