题目链接

第一问白给。

第二问:

设 \(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(K8s)基础知识(docker容器技术)

    今天谈谈K8s基础知识关键词: 一个目标:容器操作:两地三中心:四层服务发现:五种Pod共享资源:六个CNI常用插件:七层负载均衡:八种隔离维度:九个网络模型原则:十类IP地址:百级产品线:千级物理机 ...

  2. nodeJS从入门到进阶三(MongoDB数据库)

    一.MongoDB数据库 1.概念 数据库(DataBase)是一个按照数据结构进行数据的组织,管理,存放数据的仓库. 2.关系型数据库 按照关系模型存储的数据库,数据与数据之间的关系非常密切,可以实 ...

  3. PYTHON 文件读写、坐标寻址、查找替换

    读文件 打开文件(文件需要存在) #打开文件 f = open("data.txt","r") #设置文件对象 print(f)#文件句柄 f.close() ...

  4. Combox控件绑定大量数据卡顿问题与解决办法

    一般我们WPF中Combox的绑定都是下面这种写法. XAML: <ComboBox IsEditable="False" ItemsSource="{Bindin ...

  5. JavaScript获得URL地址栏参数防乱码

    JavaScript获得URL地址栏参数防乱码 JavaScript中经常需要解析地址栏中拼接的参数.下面的代码基本是固定的代码,这里摘录下备用. //获得地址栏参数值 function getUrl ...

  6. shell输出文本颜色

    绿地白字 echo -e "\033[42;37m 绿底白字 \033[0m"

  7. 腾讯微服务框架Tars的初体验

    最近研究了一下腾讯的微服务体系开发框架. 官方的搭建过程:https://github.com/TarsCloud/Tars/blob/master/Install.zh.md 自己填的坑: 不得不说 ...

  8. H3C Short GI

  9. Github 上 10 个值得学习的 Springboot 开源项目

    Spring Boot 几乎继承了所有 Spring 框架的优点,同时还可以让项目的配置更简化.编码更简化.部署更方便.近两年受到很多开发者的追捧,也是火热的不行! 下面给大家整理了 10 个 Git ...

  10. subprocess模块的使用注意

    subprocess.Popen()函数 语法格式: subprocess.Popen(arg,stdin=None,stdout=None,stderr=None,shell=False) 1.主要 ...