• 「总结」容斥。二.反演原理 1.子集容斥


    二.反演原理

    0.综述


     

    还有$zsq$学长更加浅显的解读。

    反演一般就是把一个好看但难算的式子转化成一个难看且难算的式子在转化为一个难看但好算的式子。

    Upd:还说是把表达式中的限制转化为bool表达式。

     

    下面要说我知道的几种反演。

    子集反演,针对的是集合交并的容斥。

    二项式反演,针对组合原理的容斥。

    莫比乌斯反演,针对约数和倍数的容斥。

    斯特林反演,针对集合划分的容斥。

    最值反演($Min\_Max$容斥),针对集合元素出现的最值的反演。

    先来一个裸一点的反演

    1.子集反演。

    $$g(S)=sumlimits_{Tsubseteq S}f(T)$$

    $$f(S)=sumlimits_{Tsubseteq S}(-1)^{left|S ight|-left|T ight|}g(T)$$

    这个是裸的容斥,证明的话,奇加偶减自己想想就明白了。

    $fr.$小星星。

    直接算很麻烦很麻烦很麻烦所以考虑大力容斥可以喵。

    限制很多还是$dp$然后,设$dp[i][j][S]$为以$i$为根的子树,$i$在原图中对应了$j$,子树里所有的点都在对应$S$集合中的点,不要求子树一一对应,随便怎么对应都可以的方案。

    这个$O(n^3)tree dp$就能够得到。

    会有很多点被重复对应,我们显然要容斥。

    然后这里学长讲的时候说是随便$yy$了个容斥系数,但是其实这个系数是用子集反演得到的。

    设$f(S)$为集合$S$中的没一个元素都有被对应的方案数。

    设$g(S)=sumlimits_{isubseteq S}dp[1][i][S]$也就是$S$的方案数。

    那么:

    $$g(S)=sumlimits_{Tsubseteq S}f(T)$$

    子集反演得到:

    $$f(S)=sumlimits_{Tsubseteq S}(-1)^{left|T ight| - left|S ight|}g(T)$$

    设$S$为$n$个点的全集,那么我们求得就是:

    $$ans=f(S)$$

    枚举集合$T$容斥+$dp$即可解决。

    复杂度$O(n^32^n)$

    $se.$黑暗前的幻想乡。

    是矩阵树的题了。

    给定了$n-1$个制造商,每个制造商可以造$m$条边,有$n$个城市,求每个每个制造商负责一条边并且使得城市联通的方案数。

    $n<=17$

    首先可以发现$n$很小。

    我们考虑暴力枚举每一种组合方式就可以了。

    我们设$g(S)$为最终的建设商都属于$S$的情况下的方案。

    $f(S)$为建设商恰好为$S$的方案。

    那么:

    $$ans=f(mx)$$

    考虑求$f(S)$

    发现$g(S)$很好求,矩阵树定理重构$O(n^32^n)$就可以得到。

    考虑子集反演。

    由于:

    $$g(S)=sumlimits_{Tsubseteq S}f(T)$$

    反演得到:

    $$f(S)=sumlimits_{Tsubseteq S}(-1)^{left|S ight|-left|T ight|}g(T)$$

    可以得到$f(mx)$。

    得解。

    $th.$与$FWT$结合,我还没有做过题。

  • 相关阅读:
    WeUI——switch开关转换
    WeUI——单选框
    WeUI——CheckBox表单复选框
    WeUI——表单输入框状态
    WeUI——表单验证码
    详细介绍 C# 中的方法和参数
    C# 中类的基本概念
    C# 中的类型和变量
    学习 C# 从 Hello World 开始吧
    C# 和 .NET Core 的关系
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/11644600.html
Copyright © 2020-2023  润新知