• CF1010F Tree


    真·毒瘤题

    这个题面写错了一句话。要求的是每个节点的石子树>=它的两个儿子石子数的和。
    首先考虑怎么算石子分配的方案。
    如果对这棵树每个节点的石子数都和儿子差分一下的话,可以唯一对应一颗每个点都要一个>=0的权值的树。
    且这棵树的权值和为x。
    那么就可以插板法算一下了,因此它与树的结构无关,只与大小有关。
    因此我们只需要对第一种操作算一下联通块大小为k的方案数即可。
    直接dp是n^2的,过不了。
    首先树链剖分。
    然后重链头的dp值可以写成一个多项式。
    设a[n]为链上左儿子的dp值的生成函数*x。
    ans[n]=1+a[n]×ans[n-1]=1+a[n]+a[n]a[n-1]+a[n]a[n-1]a[n-2].....

    考虑怎么计算这个式子,大力分治乘法即可。

    考虑一下这样做的复杂度。
    做一次这样分治乘法的复杂度是sizelog2的,size为重链头的子树大小。
    又因为使用了树链剖分,每个点到根节点的路径最多只会有logn段重链,每个点只会向上贡献logn次。
    因此总复杂度O(nlog^3n)

  • 相关阅读:
    Excel教程(5)
    Excel教程(4)
    Excel教程(3)
    Excel教程(2)
    如何在Excel中少犯二(I)
    for zip
    temp
    study
    eclipse
    shell
  • 原文地址:https://www.cnblogs.com/Creed-qwq/p/10452856.html
Copyright © 2020-2023  润新知