题目链接

第一问白给。

第二问:

设 \(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. 论DOM中文档和元素的位置大小属性及其区别

    element.offsetLeft/Top  获取元素相对于最近的有定位的父元素的坐标,如果没有有定位的父元素,则是文档坐标 element.scrollTop/Left 获取元素滚动卷去的距离 e ...

  2. DevExpress中GridColumnCollection实现父子表数据绑定

    绑定数据: 父表: DataTable _parent = _dvFlt.ToTable().Copy(); 子表: DataTable _child = _dvLog.ToTable().Copy( ...

  3. C# vb .net实现透明特效滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的透明效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...

  4. np.newaxis的使用及有趣的数组相乘

    a=np.array([1,2,3,4])a=a[np.newaxis,:] #固定行,相当于1行多列b=np.array([2,4,6]) b=b[:,np.newaxis] #固定列,相当与多行1 ...

  5. 记录screen屏幕日志

    1.建立日志存放目录#mkdir /var/log/screen/ 2.修改配置文件,在末尾添加配置内容#vi /etc/screenrclogfile /var/log/screen/%t.log ...

  6. Java开发环境之Eclipse

    查看更多Java开发环境配置,请点击<Java开发环境配置大全> 拾壹章:Eclipse安装教程 1)去官网下载安装包 http://www.eclipse.org/downloads/ ...

  7. Gtest:源码解析

    转自:玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest 一.前言 “深入解析”对我来说的确有些难度,所以我尽量将我学习到和观察到的gtest内 ...

  8. 《大象 Thinking in UML》读书笔记:软件开发——从现实世界到对象世界

    参考:Process-oriented vs. Object-oriented 前言 软件行业在采用OO的思想后,从一开始只对编码使用OO,到现在“分析-设计-编码”全部环节使用OO,形成了OOA.O ...

  9. Python入门篇-高阶函数

    Python入门篇-高阶函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.高级函数  1>.First Class Object 函数在Python中是一等公民 函数也 ...

  10. CentOS Linux更改MySQL数据库目录位置

    引言: 由于MySQL的数据库太大,默认安装的/var盘已经再也无法容纳新增加的数据,没有办法,只能想办法转移数据的目录. 下面我整理一下把MySQL从/var/lib/mysql目录下面转移到/ho ...