• 「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} ]

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

  • 相关阅读:
    Python:给你们安排一波VIP音乐,看我是如何不充会员也能下载的
    最详细Python打包exe教程,并修改图标,30秒搞定!
    Python:20行代码爬取高质量帅哥美女视频,让你一次看个够
    【Python爬虫】招聘网站实战合集第一弹:爬取前程无忧
    Python爬虫:爬点大家都喜欢的东西,比如美女!每天保持心情愉悦!
    Python吃喝玩乐:爬取全城按摩门店,看看有没有你想去的!
    明天就是1024了,Python前来报到!爬取全网M子图片!
    周末福利!用Python爬取美团美食信息,吃货们走起来!
    Python小工具:据说这是搜索文件最快的工具!没有之一!一起感受下......
    简单实现一个流程图(箭头流程图)
  • 原文地址:https://www.cnblogs.com/realSpongeBob/p/WC2019T1.html
Copyright © 2020-2023  润新知