zoukankan      html  css  js  c++  java
  • 计数

    ------ 总结 ------

    无向图

    1. 有标号

    [h(n) = 2^{inom n 2}$$表示 $n$个点的任意图计数 $g(n) $ 表示$n$个点的连通图计数 $un(n) $表示$n$个点的不连通图计数 $$h(n) = sum_{k=1}^n inom{n-1}{k-1} g(k) h(n-k)]

    [un(n) = sum_{k=1}^{n-1}inom{n-1}{k-1} g(k)h(n-k) ]

    (g)的一种常用方法为(ln)(分治fft)

    即令(H, G)(h, g)的生成函数 , 有(H = e^{G}, G = ln (H))

    (g)的另一方法是容斥(g=h-un)

    [即g(n)=h(n) - sum_{k=1}^{n-1} inom{n-1}{k-1}h(n-k)g(k) ]

    一种方法是把(h(n),g(n))放一起, sigma用分治fft

    一种方法是把减号移左边, 然后变成多项式求inv

    2. notice

    如果是任意图, 经过大量打表实验, (h(n) = F(n) * 2^{inom n 2}), (F(n))为与n有关的一个多项式

    度数k次方和 原题的价值

    总度数(k)次方 = (2^k) * 总边数k次方

    每块点数(k)次方和 连在一起的幻想乡 IIII

    每块边数(k)次方和 连在一起的幻想乡 IIIII

    总边数(k)次方和xsy 1538 - 连在一起的幻想乡I II III

    有向图, (2^{inom n 2})变成(2^{n(n-1)})就好了

    1. 有标号

    关于prufer码 :

    每次找出编号最小的叶子节点,写下与它相邻的节点的编号,然后删掉这个叶子节点。反复执行这个操作直到只剩两个节点为止(此时无法确定叶子)

    反过来, 对于一个prufer码, 从前往后, 对于码的第(i)位,我们可以每次找到当前最小的未选节点, 将其和第(i)位连接. 最后剩下两个未选, 连起来

    这样prufer码和树一一对应

    于是(n)个点的无根树有(n^{n-2})种, 有根树有(n*n^{n-2} = n^{n-1})

    设每个点(i)的度数为(d_i), 当(d_i>1)时, 会被其他点加入prufer码, 于是第(i)个点在恰出现(d_i-1)

    多项式系数$$inom{n-2}{d_1-1,d_2-1,cdots, d_{n}-1}$$

    *2. 无标号

    3. notice

    有标号时 : 有根树 = 无根树 * 可选根集大小

    二叉树

    1. 有标号

    相比普通的树 , 此时有了强行的左右之分, 叶子间不是无序的

    (行吧 感觉还是要看出题人)

    2. 无标号

    (Leftrightarrow)长度2n括号序列 (Longleftrightarrow)卡特兰数第(n)项 = (frac{inom{2n}{n}}{n+1})

    *毛毛虫

    二分图

    (h(n))为 任意 的 黑白染色 的 二分图

    (g(n))为 连通 的 黑白染色 二分图 计数

    (h'(n))为 任意 的 无色 二分图 计数

    (g'(n))为 连通 的 无色 二分图 计数

    [h(n) = sum_{i=1}^n inom n i 2^{i(n-i)} ]

    (G = ln (H))

    (g' = g/2)

    (H' = exp (G'))

    另外一种推法:

    $H' ^{~2} = H $

    为什么呢, 对于二分图的一个连通块, 染色方案只有两种

    那么如果一个二分图 有k个连通块, 那么方案有(2^k)

    (H'^{~2})会导致无色图算重, 考虑(k)个连通块的方案, 它被卷积恰好算重(2^k)

    DAG

    照样的, 我们先不考虑连通性, 那么

    [h(n) = sum_{k=1}^n (-1)^{k-1}inom n k h(n-k) 2^{k(n-k)} ]

    连通图直接ln什么的套路一下就好

    考虑(2^{k(n-k)})如何卷积

    (k(n-k)=frac{n^2- k^2-(n-k)^2}{2})

    于是$$frac{h(n)}{n!}2^{frac {-n2}2}=sum_{k=1}n frac {(-1){k-1}}{k!}2{frac{-k^2}{2}} frac{h(n-k)}{(n-k)!} 2{frac{-(n-k)2}{2}}$$ (容斥, 枚举出度0节点数)

    强连通

    (f(n))表示(n)个点的强连通森林 计数

    (f'(n))表示(n)个点的强连通森林中, 奇数个连通块对(f')贡献为正, 偶数个为负 (即放了个容斥系数进去)

    (g(n))表示(n)个点的连通强连通图 计数

    (h(n))表示(n)个点的任意图 计数

    [h(n) = sum_{k=1}^n inom n k h(n-k) f'(k) 2^{k(n-k)}$$ (任意图缩点后是一个$DAG$, 每个点表示一个强连通块) $$f'(n) = g(n) - sum_{k=1}^{n} inom{n-1}{k-1} g(k) f'(n-k)]

    有标号 - 欧拉图

    (Leftrightarrow)所有点的度数均为偶数

    我们考虑先删掉与(1)相连的(n-1)条边

    剩下乱连$$2^{inom {n - 1} 2} $$

    乱连之后, 可以唯一确定(1)相连的那(n-1)条边的状态 : 与被连接的点的度数相关

    但是, 用(1)取补全度数后, 会不会导致(1)的度数为奇数呢?

    不会. 任意图的度数之和为偶数

    综上, 有标号欧拉图 总数 为(2^{inom {n-1} 2})

    *平面图

    Google搜到的

    ------ Problems ------

    任意图 - 有标号

    xsy 1729 - 小朋友和二叉树

    给定每个节点的可选权值集合((valge 1)),求权值和为(1..m)的二叉树分别有多少

    对可选集合搞一个生成函数(C)

    (T=T^2C+1) (别漏了+1, 因为边界空树(T_0=1))

    求解二元一次方程

    (T=frac{1pm sqrt{1-4C}}{2C})

    舍掉一个解, 因为(T_0 = 1)

    [lim_{x o 0} frac {1 + sqrt{1-4C(x)}}{2C(x)} = infty ]

    对于减号, 上下都趋于0, 因为(C(x))无常数项, 我们令其为y, 然后洛必达

    [lim_{y o 0} frac{1-sqrt{1-4y}}{2y} = lim_{y o 0} frac{2}{2sqrt{1-4y}} = 1 ]

    *xsy 3684 - 大朋友和多叉树

    多叉树计数

    xsy 1295 - 基环树计数

    (n)个点(n)条边的带标号图计数, 没有模数

    如果有模数可以像下面仙人掌计数那样搞 , 满足只有根是环, 求出有根树再除k就是无根图

    这题可以这样

    [ans = F(n,k) frac{egin{bmatrix}k-1\iend{bmatrix}}{2} ]

    即先枚举环大小, 轮换, 正反向 , 然后乘(F(n,k)), n个点k个森林计数

    考虑算两次 , (n)个点(k)个块,说明连了(n-k)条边, 考虑连边的方案数(S)

    (S=F(n, k) (n-k)!)

    [S= prod_{i=1}^{n-k} n(n-i-1) = n^{n-k} (n-1)^{underline{n-k}} ]

    于是$$F(n,k) = n^{n-k} inom{n-1}{n-k} = n^{n-k} inom{n-1}{k-1}$$

    另一种推法利用prufer

    考虑将环上的边都断开, 然后加一个方点在中间, 权值(infty)

    此时方点为根, 然后设环大小为(k), 然后首先(inom{n}{k})钦定一个环, 然后把权值设为(infty)

    最后(k)位一定选择方点

    除了最后(k)位之外, 剩下的最后一位, 一定填入(k)中之一

    其他的随便

    于是$$ F(n, k)= n^{n-k-1}kinom n k$$

    仙人掌计数

    一个无向连通图的任意一条边最多属于一个简单环, 称为仙人掌

    我们设(g(n))表示(n)个点的有根仙人掌计数

    考虑删掉根

    (1) 该点连接着一个子树

    (2) 该点连接着一个环

    这两种情况是起来的, 对应着乘法分配率

    子树的话生成函数是(G)

    环拆开变成 链+树, 链是有序的, 这里不用exp, 生成函数是$$sum_{i=2}^infty frac {G^i}2 =frac {G^2}{2-2G}$$

    或起来$$G+frac{G^2}{2-2G} = frac{2G-G^2}{2-2G}$$

    把根连上

    [G = x ~ e^{frac {2G-G^2}{2-2G}} ]

    对于无根, 我们只需对答案乘(n)

    对于沙漠计数(仙人掌森林), exp即可

    对于求生成树个数期望值, g(n)改为有根仙人掌生成树计数方案

    拆长度(i)的环的时候有(i)种拆法, 其他部分大体不变

    *点双计数

    点双计数

    xsy 1538 - 连在一起的幻想乡 I

    (n)个点的无向连通图中: 总边数的平方的和

    (nle 2000)

    我们记

    (h_k(n))为任意n个点的图, 总边数的k次方和

    (g_k(n))为任意(n)个点的连通图, 边数的(k)次方和

    [h_0(n) = 2^{inom n 2}$$ (即求方案数) $$h_1(n) = inom n 2 2^{inom {n} 2 - 1}$$ (单独考虑每条边) $$h_2(n) = sum_{k=1}^n inom{n-1}{k} [~ h_0(n-1) k^2 + 2 h_1(n-1) k + h_2(n-1)~]$$ (枚举每个点连边数) 又$$h_0(n)= sum_{k=1}^n inom{n-1}{k-1}h_0(n-k)g_0(k)~~~$$ (枚举连通块) $$h_1(n) = sum_{k=1}^n inom{n-1}{k-1} h_0(n-k) g_1(k) + h_1(n-k) g_0(k)$$ (枚举连通块) $$h_2(n) = sum_{k=1}^n inom{n-1}{k-1} [~h_0(n-k)g_2(k) + 2 h_1(n-k) g_1(k) + h_2(n-k) g_0(k) ~]$$ (枚举连通块) 后三行利用二项式展开$$sum_{ain h,bin g}(a+b)^k]

    xsy 1538 - 连在一起的幻想乡 II

    (n)个点的任意无向图中 : 总边数的(k)次方和

    (nle 10^9, kle 500)

    打表发现 : (h_k(n))(n)(2k)次多项式, 乘上一个(2^{inom n 2 -k})

    于是我们可以(Theta(k^3))求出(h_k(1..k))

    然后先舍弃掉后面n在指数的那个部分, 利用线性插值出解 , 最后再补回n在指数的部分

    xsy 1538 - 连在一起的幻想乡 III

    好吧我承认这是ypl题..

    (n)个点的任意无向图中 : 总边数的(k)次方和

    (nle 10^9, kle 10^5)

    上面算法的瓶颈是求(h_k)的逐步递推, 我们重新考虑

    (m(s))为图(s)的边数

    [egin{aligned} &sum_{s} m(s)^k\ =&sum_{s} sum_{j=0}^k left{egin{matrix}k\jend{matrix} ight}inom {m(s)}{j} j!\ =&sum_{j=0}^k left{egin{matrix}k\jend{matrix} ight} j! sum_{s} inom {m(s)}{j}\ =&sum_{j=0}^k left{egin{matrix}k\jend{matrix} ight} j! inom {inom n 2}{j} 2^{inom n 2 - j} end{aligned} ]

    (Theta(k))即可解决问题

    xsy 1538 - 连在一起的幻想乡 IIII

    (n)个点的任意无向图中 : 每块点数(k)次方的和

    (h(n))表示任意图方案数

    (g(n))表示连通图方案数

    (f(n))表示任意图 每块点数(k)次方的和

    [h(n) = sum_{i=1}^n inom{n-1}{i-1} (~~g(i)f(n-i) + h(n-i)i^k~~) ]

    xsy 1538 - 连在一起的幻想乡 IIIII

    (n)个点的任意无向图中 : 每块边数的(k)次方的和

    (m(s))表示图(s)的边数

    (h(n))表示任意图方案数

    (g(n))表示连通图方案数

    (f(n))表示任意图 每块边数(k)次方的和

    (t(n))表示连通图 边数(k)次方

    [h(n) = sum_{i=1}^n inom {n-1}{i-1} (~~g(i)f(n-i) + h(n-i) t(i)~~) ]

    其中(t(i))连在一起的幻想乡 I中的(g(i))

    xsy 1544 - fixed

    矩乘不动点 -> 建图 -> 求(nle 3000)个点的非(连通强连通图)计数

    任意图- 连通强连通

    cogs 2395 - 二分图计数 I ~ III

    详见 总结

    xsy 1300 - 原题的价值

    求度数(k)次方 的和

    [h(n) = n * sum_{i=1}^{n-1} inom {n-1} i i^k 2^{inom {n-1} 2}$$(单独考虑每个点) 做法1 : 这个式子可以卷积求出$h$的前$k$项, 根据打表结果, $h(n)$是$n$的$k+1$次多项式 * $2^{inom n 2}$ 可以先舍弃$2^{inom n 2}$ , 然后线性插值, 最后补上 做法2 : 考虑斯特林展开 ]

    egin{aligned}
    h(n) &= n * 2^{inom {n-1} 2 }sum_{i=0}^{n-1}inom {n-1} i i^k\
    sum_{i=1}^{n-1}inom {n-1} i i^k&= sum_{i=0}^{n-1}inom {n-1} i sum_{j=0}^k left{egin{matrix}k jend{matrix} ight} inom i j j!
    &= sum_{j=0}^k left{egin{matrix}k jend{matrix} ight} j! sum_{i=0}^{n-1} inom i j inom{n-1}{i}
    &= sum_{j=0}^k left{egin{matrix}k jend{matrix} ight} j! sum_{i=0}^{n-1} inom {n-1}jinom {n-1-j}{i-j}
    &= sum_{j=0}^k left{egin{matrix}k jend{matrix} ight} j! inom {n-1}jsum_{i=j}^{n-1} inom {n-1-j}{i-j}
    &= sum_{j=0}^k left{egin{matrix}k jend{matrix} ight} j! inom {n-1}jsum_{i=0}^{n-1-j} inom {n-1-j}{i}
    &= sum_{j=0}^k left{egin{matrix}k jend{matrix} ight} j! inom {n-1}j 2^{n-1-j}
    end{aligned}

    [ ## *范浩强 Alkane 无根无标号每个点度不超过4的树(烷烃) # 任意图 无标号 ## *Spoj PT07D 无标号无根树 无标号有根树 ## 最长链为n的二叉树 求最长链为n**无标号**二叉树, 儿子**有序** ,其中最长链可以从下到上再到下 考虑计算最长链, 我们只需要考虑一个点的$mxdep$ 记$f[i]$表示$mxdep=i$, 最长链长度$=n$的二叉树个数 记$g[i]$表示$mxdep = i$, 最长链长度$lt n$的二叉树个数 dp好麻烦, 大概可以枚举左儿子状态, 找到对应合法右儿子, 维护下前缀和什么的, 可以$Theta(n)$ # 给定图 - 有标号 ## bzoj 1005 - 明明的烦恼 $nle 1000$个点的有标号图, 有的点度数给定, 有的点度数未知, 求方案数 $$inom {n-2}{n-2-sum,~d_1,~d_2,~cdots,~d_m} (n-m)^{n-2-sum}]

    bzoj 3812 - 主旋律

    (nle 15)的图 ,求删掉一些边后强连通方案数

    删若干边 (Leftrightarrow)生成子图

    即考虑强连通的dp式, 变成枚举子集, 然后利用给定图的边集去计算

    枚举状态 + 枚举该状态子集 (Theta (3^n))

    *hdu 5304 - 基环树计数

    (nle 16)的图, 求生成子图中基环树计数

    给定图 - 无标号

  • 相关阅读:
    Python 3 Mysql 增删改查
    Python3 MySQL 数据库连接 -PyMySQL
    java 获取cookie
    Python 通过配置文件 读取参数,执行测试用例,生成测试报告并发送邮件
    Python 操作 Excel 、txt等文件
    SonarQube代码质量管理平台安装与使用
    Python + HTMLTestRunner + smtplib 完成测试报告生成及发送测试报告邮件
    Python 解析Xml文件
    GO语言基础
    FileBeat
  • 原文地址:https://www.cnblogs.com/acha/p/7571508.html
Copyright © 2011-2022 走看看