zoukankan      html  css  js  c++  java
  • loj 3102

    题目大意:

    给定 (m) 棵无向树(left{T_{1}=left(V_{1}, E_{1} ight), T_{2}=left(V_{2}, E_{2} ight), cdots, T_{m}=left(V_{m}, E_{m} ight) ight})构成的森林。定义无向边集(E^ast = left{ left( u, v ight) mid u in V_i, v in V_j, i eq j ight}).令 (G=(V,E)),其中 $ V = V_1 cup V_2 cup cdots cup V_m, E = E_1 cup E_2 cup cdots cup E_m cup E^ast$ .

    你需要求出 $G $ 的 Hamilton 回路的数量。

    对于每一颗树,先求出 (ways_i) 表示在这颗树上选出 (i) 条链的方案数。

    现在的问题就是要把若干条链拼成一个环,同色不相邻。

    先破环成链。对于一颗树,他的指数生成函数是 (sum_{i=1}^{n} f_i i! sum_{j=0}^{i} (-1)^{j} inom {i - 1} {j} frac {x^{i-j}} {(i-j)!}) ,成链答案就是若干个卷起来,成环的话最后还要减去首尾同色的答案。

    review

    本题中的指数生成函数又称"带容斥系数的生成函数",其关键是考虑广义的二项式反演 $ F(n,m) = sum_{i,j} (-1)^{n-i+m-j} G(i,j)$ ,正确性可以不断的套一维的二项式反演.

    与其类似的,设 $G(n_k) $ 为长度为 $ n $ 的排列,方案数是 $ frac {n!} {n_1! n_2! .. n_k!} $ ,这一部分用 egf 就可以解决了.再考虑前面的系数,枚举与第一个位置相邻的同色联通块大小,算上此时的贡献.注意为 $ (-1)^{j} $ ,因为当 $ j = 0 $ 时候,贡献是正的,意义是不限制随便排列.

    再考虑如何从 $ Seq $ 推到 $ Cyc $ ,对于长度为 $ len $ 的环,在容斥的时候一个合法的方案对应 $ len $ 个 $ Seq $ 的方案,对应位置除以 $ len $ 就可以了. (考虑 $ Seq_k $ 和 $ Cyc_k $ 对应位置的系数).

    也可以直接在生成函数里面减去钦定头尾相同的贡献.

  • 相关阅读:
    bootstrap 模态框一闪而过的问题
    ${requestScope.paramName} 与 ${param.name}
    Android控件
    质量属性
    android基础知识复习一
    Numpy基础篇二
    miniconda 搭建tensorflow框架
    Numpy基础篇一
    pandas 数据索引与选取
    《架构漫谈》阅读笔记
  • 原文地址:https://www.cnblogs.com/foreverpiano/p/11751339.html
Copyright © 2011-2022 走看看