随笔分类 -  树形dp

摘要:Choosing Two Paths 搞不懂为啥我要写换根啊, 这么麻烦。。 阅读全文
posted @ 2019-11-06 17:23 NotNight 阅读(216) 评论(0) 推荐(0)
摘要:Leaf Partition 考虑树形dp dp[ u ][ 0 ] 表示 u 这棵子树处理完, 不能向上延伸的方案数。 dp[ u ][ 1 ] 表示 u 这棵子树处理完, 必须向上延伸的方案数。 dp[ u ][ 2 ] 表示 u 这棵子树处理完, 可以向上延伸的方案数。 然后转移的时候细心一点 阅读全文
posted @ 2019-11-04 13:54 NotNight 阅读(303) 评论(0) 推荐(0)
摘要:HDU - 5815 感觉要是值域范围是1000以内, 感觉还是能写出来的。。 考虑dp[ i ][ j ]表示从 1 到 i 路径上的值是 j , i 这棵子树的最大贡献值。 然后可以发现 j 这维可以离散化, 离散化之后最优值不会变, 然后dp一遍就好了。 阅读全文
posted @ 2019-09-04 13:46 NotNight 阅读(142) 评论(0) 推荐(0)
摘要:HDU - 5854 二分答案之后, 设答案值为v, x为小于等于v的边的数量, y为大于v的边的数量, 列出方程 x > (x + y) / k == (k - 1) * x - y > 0, 感觉有点像线性规划的样子。 然后用树形dp去check, 判合不合法的时候可以优化成一个R, 但是不优化 阅读全文
posted @ 2019-08-30 22:11 NotNight 阅读(236) 评论(0) 推荐(0)
摘要:HDU - 5378 dp[ i ][ j ]表示 i 这棵子树填满, 有 j 个满足条件的方案数。 转移的时候组合数乘一乘。 阅读全文
posted @ 2019-07-16 15:37 NotNight 阅读(98) 评论(0) 推荐(0)
摘要:Fedor Runs for President 考虑 一棵基环树, 只有对应在基环上同一点的点对是一条路径。我们目标是使一条路经的数目尽可能少。 dp[ u ] 表示从下延伸上来的一条最优链。 但是在当前这个点 u 作为交汇点的时候, 需要从它儿子中选两个 合起来得到最优值, 这个需要用斜率去优化 阅读全文
posted @ 2019-06-28 15:18 NotNight 阅读(238) 评论(0) 推荐(0)
摘要:Shaass the Great 枚举删掉的边, 我们考虑如何将两个团连起来最优, 显然这是两个独立的问题, 两个团内分别选一个最优点连起来就好了。 用每条边的贡献取计算答案, 然后用树形dp去计算连在那个点最优, 考虑改变连接点改变所带来影响就不难写出dp了。 嗯嗯恩。。 好像又写麻烦了, 直接找 阅读全文
posted @ 2019-06-27 19:57 NotNight 阅读(197) 评论(0) 推荐(0)
摘要:Birthday 没想到平方和能在树上dp出来的。。。 知道了如何转移, 那么就很好写了。。。 阅读全文
posted @ 2019-06-07 16:54 NotNight 阅读(160) 评论(0) 推荐(0)
摘要:Bear and Destroying Subtrees 我们先考虑没有修改的到从根开始的最长期望深度。 dp[ i ][ j ] 表示 i 这棵子树所有的边有一半概率存在的情况下, 最长深度为 j 的概率。 我们只用考虑50层就够了, 因为概率随长度比边长成指数级减少。 这样的话,处理出一个 dp 阅读全文
posted @ 2019-05-28 13:45 NotNight 阅读(130) 评论(0) 推荐(0)
摘要:dp[ i ][ j ] 表示在 i 这棵子树中, 距离 i 最远点的距离为 j 的方案数。 转移应该挺显然的把, 记一下mxd[ u ] 表示 u 这颗子树的最大深度, 然后两个for套在一起复杂度就对了。 阅读全文
posted @ 2019-05-19 19:18 NotNight 阅读(1020) 评论(0) 推荐(0)
摘要:Zublicanes and Mumocrates dp[ i ][ j ][ k ] 表示 以 i 为根的子树, 占领 i 的 是 j 并且第一个人占了 i 子树的 k 个叶子节点的最小值。 然后随便d 1 d 就好了。 阅读全文
posted @ 2019-04-29 11:22 NotNight 阅读(141) 评论(0) 推荐(0)
摘要:The Chocolate Spree 对拍拍了半天才知道哪里写错了。。 dp[ i ][ j ][ k ]表示在 i 这棵子树中有 j 条链, 是否有链延伸上来。 阅读全文
posted @ 2019-04-02 11:52 NotNight 阅读(147) 评论(0) 推荐(0)
摘要:小G砍树 dfs两次, dp出每个点作为最后一个点的方案数。 阅读全文
posted @ 2019-03-11 13:13 NotNight 阅读(229) 评论(0) 推荐(0)
摘要:Treeland Tour 离散化之后, 每个节点维护上升链和下降链, 感觉复杂度有点高, 为啥跑这么快。。 阅读全文
posted @ 2019-03-03 15:59 NotNight 阅读(135) 评论(0) 推荐(0)
摘要:Karen and Supermarket 感觉就是很普通的树形dp。 dp[ i ][ 0 ][ u ]表示在 i 这棵子树中选择 u 个且 i 不用优惠券的最小花费。 dp[ i ][ 1 ][ u ]表示在 i 这棵子树中选择 u 个且 i 用优惠券的最小花费。 注意这个转移总的合起来是O(n 阅读全文
posted @ 2019-02-28 15:17 NotNight 阅读(121) 评论(0) 推荐(0)
摘要:E - Preorder Test 思路:想到二分答案了之后就不难啦, 对于每个答案用树形dp取check, 如果二分的值是val, dp[ i ]表示 i 这棵子树答案不低于val的可以访问的 最多节点, 第二次dfs求出以每个点为根的答案。 阅读全文
posted @ 2018-11-04 20:22 NotNight 阅读(218) 评论(0) 推荐(0)
摘要:思路:如果只有一棵树这个问题很好解决,dp一次,然后再dfs一次往下压求答案就好啦,带环的话,考虑到环上的点不是 很多,可以暴力处理出环上的信息,然后最后一次dfs往下压求答案就好啦。细节比较多。 阅读全文
posted @ 2018-10-26 12:35 NotNight 阅读(301) 评论(0) 推荐(0)
摘要:E - Demiurges Play Again 感觉这种类型的dp以前没遇到过。。。 不是很好想。。 dp[u] 表示的是以u为子树进行游戏得到的值是第几大的。 阅读全文
posted @ 2018-09-18 19:58 NotNight 阅读(163) 评论(0) 推荐(0)
摘要:D - Road Improvemen 思路:0没有逆元!!!! 不能直接除,要求前缀积和后缀积!!! 阅读全文
posted @ 2018-09-13 21:42 NotNight 阅读(176) 评论(0) 推荐(0)
摘要:思路:随便想想就能想出来啦把。。。 卡了我一个vector。。。 阅读全文
posted @ 2018-06-14 16:06 NotNight 阅读(198) 评论(0) 推荐(0)