动态规划EX

树形DP

 

  • 出一棵n个节点的树,每个节点上有点权a_i,求最长的树上路径,满足条件:路径上经过节点(包括两个端点)点权的gcd和不等于1
  • n <=2e5,1<=a_i<=2e5
  •  
  • 不互素就ok,不用考虑具体的gcd值,还不用考虑重复计算。
  • 对于每个节点u,维护f_{u,v}表示u往下挂出的点权都能被v整除的最长链。
  • v只取整除a_u的质数,个数很少,很容易转移。
  • 边转移边更新全局答案。
  • Solution

 

 

  • 给出一棵n个节点的树,对于1~n间的每一个数k,你需要求出:最多能选出多少条互不相交的路径,每条路径的长度都为k。
  • n <= 1e5
  •  
  • 考虑对于一个给定的k,使用dp计算答案。
  • 贪心:在一个子树当中,尽可能最大化完整的路径条数;其次最大化未完成的链的长度。
  • 进行合并时,先尝试儿子的dp值中第二维最大值与次大值能否拼成一条完整的链(长度和>=k),若不行再选取一条最长的链向上延伸。时间复杂度O(n)
  • f_k表示单次对于给定的k的答案。
  • 显然有:f_k <= n / k
  • f最多有O(sqrt(n))种取值,证明:当k>sqrt(n)时,取值范围为[1,sqrt(n)],当k<sqrt(n)时,最多有sqrt(n)种取值。
  • f 显然单调,在每个边界上二分即可。
  • 《动态规划EX》
  • 自闭了,这不就是NOIP2018D1T3,我竟然连贪心都不会
  • Solution

 

 

  • 给出一棵n个节点的树T,对于其中任意一个非空节点集合X,定义f(X)为包含这些点的最小连通子树的边数。给出一个正整数k,求:

                                                          《动态规划EX》

                                                 《动态规划EX》

                          S为第二类斯特林数,考虑其组合意义不难得到该转化

              《动态规划EX》

                                                 对《动态规划EX》进行DP即可

  • dp_{i,j}表示以点i为根的所有生成树当中标记了j条边的方案数,由于点集大小之类的不影响答案,所以不同的点集对应的生成树可以一并考虑对于每一棵生成树,我们都在它最高的节点处累计进答案。
  • Solution

 

 

    原文作者:动态规划
    原文地址: https://blog.csdn.net/strangeDDDF/article/details/86512985
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞