zoukankan      html  css  js  c++  java
  • 「WC2019」数树

    文中大写字母均表示树的边集。

    (op = 0)

    答案就是 (y^{n - |T1cap T2|}),随便开个什么东西统计一下就好了。

    (op = 1)

    要求:

    [sum_{T2} y^{n - |T1cap T2|} ]

    考虑容斥。注意到有 (f_{S} = sum_{Tsubseteq S}sum_{Rsubseteq T}left(-1 ight)^{|T| - |R|}f_{R})(此处,(f_S = y^{n - |S|})),代入得:

    [egin {align*} & sum_{T2} sum_{Ssubseteq T1cap T2}sum_{Tsubseteq S}left(-1 ight)^{|S| - |T|}y^{n - |T|} \ = & sum_{Ssubseteq T1}g_Ssum_{Tsubseteq S}left(-1 ight)^{|S| - |T|}y^{n - |T|} \ = & sum_{Ssubseteq T1} g_S y^{n - |S|} sum_{k = 0}^{|S|} inom{|S|}{k}left(-y ight)^{|S| - |T|} \ = & sum_{Ssubseteq T1} g_S y^{n - |S|} left(1 - y ight)^{|S|} \ end {align*} ]

    其中 (g_{S}) 表示包含边集 (S) 的树的数量。

    (S) 形成了 (k) 个连通块,它们的大小序列为 ({a_i}),易知 (k = n - |S|)。关于这个 (g_S) 有一个结论,就是 (g_S = n^{k - 2}prod a_{i})(证明在最后)。代入可得

    [egin {align*} & sum_{Ssubseteq T1} y^{k} left(1 - y ight)^{n - k} n^{k - 2}prod a_{i} \ = & frac {left(1 - y ight)^{n}} {n^{2}} sum_{Ssubseteq T1} prod frac {ny} {1 - y} a_{i} \ end {align*} ]

    (k = frac {ny} {1 - y}),考虑它的组合意义,即从每个连通块中选出一个点给答案乘 (k) 的贡献。

    考虑 dp,记 (dp_{u, 0/1}) 表示考虑 (u) 这棵子树,(u) 所在连通块是否造成贡献,所有已确定的连通块的贡献的和。转移是显然的,注意转移时候的顺序。

    (op = 2)

    只有我感觉 (op = 2)(op = 1) 简单吗

    类似 (op = 1) 地推导,快进掉过程,可以得出关于答案的柿子:

    [frac {left(1 - y ight)^{n}} {n^{4}} sum_{T} prod frac {n^{2}y} {1 - y}a_{i}^{2} ]

    枚举 (T) 似乎不太好处理,于是转而枚举连通块的大小序列 ({a_{i}})。对于一个大小为 (a_{i}) 的连通块,内部有 (a_{i}^{a_{i} - 2}) 种连边方案,那么对于一个连通块,它的生成函数可以表示为:

    [sum frac {n^{2}yk^{k}} {1 - y}x^{k} ]

    根据 exp 的组合意义,可以得到答案就是:

    [frac {left(1 - y ight)^{n}} {n^{4}}n![x^{n}]expleft( sum frac {n^{2}yk^{k}} {left(1 - y ight)k!}x^{k} ight) ]


    注意特判 (y = 1)

    Code

    Proof

    (n) 个点,包含 (k) 个大小序列为 ({a_i}) 的连通块的生成树个数。

    先把每个连通块看成一个点,考虑它的 ( ext{Prufer}) 序列。假设连通块 (i) 在序列中出现了 (d_{i}) 次,则答案为:

    [left(prod a_i ight)left(k - 2 ight)!sum_{sum d_{i} = k - 2}prod frac {a_{i}^{d_{i}}} {d_{i}!} ]

    后面那个东西有一个 (sum d_{i} = k - 2) 的限制,不难想到使用生成函数来描述。具体地,答案为:

    [left(prod a_i ight)left(k - 2 ight)![x^{k - 2}] prod sumfrac {a_{i}^{k}} {k!}x^{k} ]

    观察后面那个 (sumfrac {a_{i}^{k}} {k!}x^{k}),不就是 (e^{a_{i}x}) 吗。所以答案也就是:

    [left(prod a_i ight)left(k - 2 ight)![x^{k - 2}] e^{sum a_{i}x} ]

    容易发现这和前面给出的结论是一致的。

  • 相关阅读:
    使用 RemObjects SDK 建立 WebService 应用
    Excel文件读写的.NET开源组件 Koogra Excel BIFF/XLSX Reader Library
    DataSnap 2009 系列之三 (生命周期篇)
    更改SQL Server表所有者的操作方法
    delphi调用cmd的两种方法
    用AndroidX86和VirtualBox打造高性能Android开发环境
    DevExpress 换肤
    Remobjects关于Channel is Busy 错误的解决方法
    关于D7“System.pas not found”错误的解决方法
    40 套漂亮的图标
  • 原文地址:https://www.cnblogs.com/realSpongeBob/p/WC2019T1.html
Copyright © 2011-2022 走看看