• 旧题重做


    [ZJOI2016]小星星

    容斥是官方做法,不过用集合并卷积也可以推出同样的dp式子。

    树形dp,令(f_{x,i,S})表示以(x)为根的子树,(x)映射到(i),子树全体映射到(S)的合法方案数。
    考虑给当前的(x)添加一个以(y)为根的子树,令新的以(x)为根的(dp)数组为(f'),有:

    [f'_{x,i,S}=sum_{(i,j)in E}sum_{Acup B=S,Acap B=emptyset}f_{x,i,A}f_{y,j,B} ]

    枚举合法的(i,j),余下的就是一个看上去像子集卷积的东西。

    然而最终只需要(S)为全集的方案,如果(A)(B)有交,那么(Acup B)必然小于新的(x)的子树大小,最终不可能对答案产生贡献。

    于是考虑去掉(Acap B=emptyset)的限制,仍然保证答案的正确性,转化为集合并卷积:

    [f'_{x,i,S}=sum_{(i,j)in E}sum_{Acup B=S}f_{x,i,A}f_{y,j,B} ]

    于是令(hat f)表示(f)对最后一维做莫比乌斯变换之后的结果,有:

    [hat f'_{x,i,S}=hat f_{x,i,S}sum_{(i,j)in E}hat f_{y,j,S} ]

    初始状态下(f_{x,i,S}=[S={i}]),很容易得到莫比乌斯变换之后的结果。dp中不需要进行反演,保留莫比乌斯变换后的形式计算即可。

    最后将根的全集方案数用莫比乌斯逆变换的公式算出来即可,复杂度也是(O(n^32^n))

  • 相关阅读:
    图片延迟加载方法
    mongodb常用命令
    未知尺寸元素水平垂直居中:
    nodejs学习之加密
    nodejs学习之events的使用
    nodejs学习之events
    学习Nodejs之mysql
    PHP之几道面试题
    Jquery学习插件之手风琴
    我的第一篇博客
  • 原文地址:https://www.cnblogs.com/Mr-Spade/p/14126705.html
Copyright © 2020-2023  润新知