题目链接

第一问白给。

第二问:

设 \(b=y^{-1}\),且以下的 \(Ans\) 是除去 \(y^n\) 的。

设 \(C(T)\) 是固定了 \(T\) 中的边,再连 \(n-|T|-1\) 条边形成一棵树的方案数。设每个联通块的大小为 \(a_1,a_2,\ldots,a_{n-|T|}\),则答案为 \(n^{n-|T|-2}\prod a_i\)。

证明可以使用 Matrix-Tree 定理。

\[\begin{aligned}Ans&=\sum_{T_2}b^{|T_1\cap T_2|} \\&=\sum_S\sum_{T_2}b^{|S|}[T_1\cap T_2=S] \\&=\sum_S\sum_{T_2}b^{|S|}\sum_{S\subseteq T\subseteq T_1\cap T_2}(-1)^{|T|-|S|} \\&=\sum_{T\subseteq T_1}C(T)\sum_{S\subseteq T} b^{|S|}(-1)^{|T|-|S|} \\&=\sum_{T\subseteq T_1}C(T)(b-1)^{|T|} \\&=\sum_{T\subseteq T_1}(b-1)^{|T|}n^{n-|T|-2}\prod_{i=1}^{n-|T|}a_i \\&=n^{n-2}\sum_{T\subseteq T_1}(\frac{b-1}{n})^{|T|}\prod_{i=1}^{n-|T|}a_i \\\end{aligned}
\]

设 \(v=\frac{b-1}{n}\),就是求 \(T_1\) 的每条边选或不选,权值是 \(v^{选的边个数}\times 每个联通块大小之积\),求 \(2^{n-1}\) 种情况的权值之和。

这是之前做过的一个经典的树d,设 \(f_i\) 表示只考虑 \(i\) 的子树的答案,\(g_i\)表示只考虑 \(i\) 的子树,并且不考虑 \(i\) 所在联通块的答案乘上 \(v\)。

\[\begin{aligned}f_u&=f_uf_v+g_uf_v+g_vf_u \\g_u&=g_u(f_v+g_v)\end{aligned}
\]

int bas, f[N], g[N], head[N], to[N << 1], nxt[N << 1];
inline void adde(int a, int b){
static int cnt = 0;
to[++ cnt] = b; nxt[cnt] = head[a]; head[a] = cnt;
}
inline void dfs(int x, int fa = 0){
f[x] = 1; g[x] = bas;
for(Rint i = head[x];i;i = nxt[i]) if(to[i] != fa){
dfs(to[i], x);
f[x] = add((LL) f[x] * f[to[i]] % mod, add((LL) f[x] * g[to[i]] % mod, (LL) g[x] * f[to[i]] % mod));
g[x] = (LL) g[x] * add(g[to[i]], f[to[i]]) % mod;
}
}
inline void main(){
if(y == 1){printf("%d\n", kasumi(n, n - 2)); return;}
bas = (kasumi(y, mod - 2) - 1ll) * kasumi(n, mod - 2) % mod;
for(Rint i = 1;i < n;i ++){
int a, b; scanf("%d%d", &a, &b);
adde(a, b); adde(b, a);
}
dfs(1);
printf("%d\n", (LL) kasumi(n, n - 2) * kasumi(y, n) % mod * f[1] % mod);
}

第三问:

\[\begin{aligned}Ans&=\sum_TC(T)^2\sum_Sb^{|S|}(-1)^{|T|-|S|} \\&=\sum_TC(T)^2(b-1)^{|T|} \\&=\sum_T(b-1)^{|T|}n^{2n-2|T|-4}\prod a_i^2 \\&=\frac{(b-1)^n}{n^4}\sum_T(\frac{n^2}{b-1})^{n-|T|}\prod a_i^2 \\\end{aligned}
\]

设 \(v=\frac{n^2}{b-1}\),于是就变成了,把这 \(n\) 个点分成一些联通块,设大小是 \(a\),每个联通块的权值是 \(va^2\times a^{a-2}=va^a\),求权值之积之和。

\[\begin{aligned}Ans&=n^{-4}(b-1)^nn!\sum_{\sum a_i=n}\frac{a^av}{a!} \\F&=\sum_{k\ge 1}\frac{vk^kx^k}{k!} \\Ans&=n^{-4}(b-1)^nn![x^n]\exp(F)\end{aligned}
\]

// 以上省略贼长的板子
inline void main(){
if(y == 1){printf("%d\n", kasumi(n, 2 * n - 4)); return;}
init(n);
int p = kasumi(y, mod - 2) - 1, b = (LL) n * n % mod * kasumi(p, mod - 2) % mod;
for(Rint i = 1;i <= n;i ++)
A[i] = (LL) b * kasumi(i, i) % mod * invf[i] % mod;
poly_Exp(A, n + 1);
printf("%d\n", (LL) Exp[n] * kasumi(n, mod - 5) % mod * fac[n] % mod * kasumi((LL) y * p % mod, n) % mod);
}

Luogu5206 【WC2019】数树 【容斥,生成函数】的更多相关文章

  1. 洛谷P5206 [WC2019]数树 [容斥,DP,生成函数,NTT]

    传送门 Orz神仙题,让我长了许多见识. 长式子警告 思路 y=1 由于y=1时会导致后面一些式子未定义,先抓出来. printf("%lld",opt==0?1:(opt==1? ...

  2. [WC2019] 数树

    [WC2019] 数树 Zhang_RQ题解(本篇仅概述) 前言 有进步,只做了半天.... 一道具有极强综合性的数数好题! 强大的多合一题目 精确地数学推导和耐心. 有套路又不失心意. 融合了: 算 ...

  3. 洛谷 P5206: bzoj 5475: LOJ 2983: [WC2019] 数树

    一道技巧性非常强的计数题,历年WC出得最好(同时可能是比较简单)的题目之一. 题目传送门:洛谷P5206. 题意简述: 给定 \(n, y\). 一张图有 \(|V| = n\) 个点.对于两棵树 \ ...

  4. 洛谷P5206 [WC2019] 数树(生成函数+容斥+矩阵树)

    题面 传送门 前置芝士 矩阵树,基本容斥原理,生成函数,多项式\(\exp\) 题解 我也想哭了--orz rqy,orz shadowice 我们设\(T1,T2\)为两棵树,并定义一个权值函数\( ...

  5. 【LuoguP5206】[WC2019] 数树

    题目链接 题意 定义 \(F(T_1,T_2)=y^{n-common}\) 其中 \(common\) 为两棵树 \(T_1,T_2\) 的公共边条数. 三种问题 1.给定 \(T_1,T_2\) ...

  6. [LOJ2983] [WC2019] 数树

    题目链接 LOJ:https://loj.ac/problem/2983 BZOJ:https://lydsy.com/JudgeOnline/problem.php?id=5475 洛谷:https ...

  7. [BZOJ4455][ZJOI2016]数星星(容斥DP)

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 707  Solved: 419[Submit][Status] ...

  8. bzoj3771: Triple(容斥+生成函数+FFT)

    传送门 咳咳忘了容斥了-- 设\(A(x)\)为斧头的生成函数,其中第\(x^i\)项的系数为价值为\(i\)的斧头个数,那么\(A(x)+A^2(x)+A^3(x)\)就是答案(于是信心满满的打了一 ...

  9. NOIP2019模拟2019.9.20】膜拜大会(外向树容斥,分类讨论)

    传送门. 题解: 我果然是不擅长分类讨论,心态被搞崩了. 注意到\(m<=n-2\),意味着除了1以外的位置不可能被加到a[1]两遍. 先考虑个大概: 考虑若存在\(x,x-1,-,2\)(有序 ...

  10. 5.15 省选模拟赛 容斥 生成函数 dp

    LINK:5.15 T2 个人感觉生成函数更无脑 容斥也好推的样子. 容易想到每次放数和数字的集合无关 所以得到一个dp f[i][j]表示前i个数字 逆序对为j的方案数. 容易得到转移 使用前缀和优 ...

随机推荐

  1. kubernetes-dashboard登录出现forbidden 403

    登录k8s dashboard https://xxxxx:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard ...

  2. drf中的各种view,viewset

    drf中的各种view,viewset Django REST framework里有各种各样的view,让我有点蒙,得好好捋一捋这关系. 视图的作用 Django用"视图"这个概 ...

  3. 使用poi统计工作职责

    1 创建一个新的sheet工作页 Sheet job = workbook.createSheet("工作职责统计"); 2 查询工作职责问题选项列表,并设置第一行倒出时间 Lis ...

  4. Mars Android 接入指南

    Mars Android 接入指南 https://github.com/Tencent/mars/wiki/Mars-Android-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8 ...

  5. C# 的ToString 常用方法

    货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025E 科学型 25000.ToString(&q ...

  6. springboot IDEA新建Maven项目的Plugins出现红线的解决方法

    将pom.xml文件copy到桌面,删除项目中的pom.xml.发现项目maven中没有任何东西后,然后将桌面的pom.xml粘贴到项目目录下,刷新maven就ok了

  7. int转换为String,常用的四种方法。

    int i = 100; 方法一:String s1 = i + " "; 方法二:String s2 = String.valueof(i); 方法三(先转换为Integer类型 ...

  8. Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型)

    Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型) 一丶软件开发规范 六个目录: #### 对某 ...

  9. SLF4J: Failed to load class "org.slf4j.impl.StaticLo

    今天在修改项目是修改了pom中的配置启动后提示下面的错误, SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder&qu ...

  10. shell编程之99乘法表

    #99乘法表#!/bin/bash #第一种写法 ` #`seq ` 使用反撇号括起来的(不是单引号),表示命令替换 do for j in `seq $i` #seq可以使用变量 do echo - ...