Codeforces1113F. Sasha and Interesting Fact from Graph Theory(组合数学 计数 广义Cayley定理)
题目链接:传送门
思路:
计数。树的结构和边权的计数可以分开讨论。
①假设从a到b的路径上有e条边,那么路径上就有e-1个点。构造这条路径上的点有$A_{n-2}^{e-1}$种方案;
②这条路径的权值的选择,可以用隔板法来做,相当于用e-1个隔板分开m个球,要求每个区间至少有一个球,那么就相当于在m-1个间隙里插入e-1个隔板,有$C_{m-1}^{e-1}$种方案;
③在路径之外的点还有n-e-1个,对应有n-e-1条边,每条边的权值可取[1, m],所以有mn-e-1种方案;
④在路径之外的点构造成树,相当于把剩下的点挂在之前的e+1个点上。这等价于从n个点建一个有e+1棵树,并且有e+1个节点分别在不同的树上,的森林。
根据广义Cayley定理可知,从x个点建一个有y棵树的森林,使得给定的y个节点各自属于不同的树上,的方案数为f(x, y) = y*xx-y-1;
【此处广义Cayley的理解参考了jklover的博客】
因此有f(n, e+1)种方案。
综上所述,a到b的路径上有e条边的方案数为plan(e) = $A_{n-2}^{e-1}*C_{m-1}^{e-1}*m^{n-e-1}*f(n, e+1)$。
实现代码:
#include <bits/stdc++.h> using namespace std;
const int MAX_N = 1e6 + ;
const int md = 1e9 + ; inline int add(int a, int b) {
int res = (a+b)%md;
if (res < )
res += md;
return res;
}
inline int mul(int a, int b) {
return (int)(1LL * a * b % md);
}
int fpow(int a, int p) {
int res = ;
for (; p; p >>= ) {
if (p & )
res = mul(res, a);
a = mul(a, a);
}
return res;
}
inline int f(int x, int y) {
if (x == y)
return ;
return mul(y, fpow(x, x-y-));
} int fac[MAX_N], inv[MAX_N];
void init() {
fac[] = ;
for (int i = ; i < MAX_N; i++)
fac[i] = mul(fac[i-], i);
inv[MAX_N-] = fpow(fac[MAX_N-], md-);
for (int i = MAX_N-; i > ; i--)
inv[i-] = mul(inv[i], i);
} inline int A(int m, int n) {
return mul(fac[m], inv[m-n]);
}
inline int C(int m, int n) {
if (n > m)
return ;
return mul(A(m, n), inv[n]);
} int main()
{
init();
int n, m, a, b;
cin >> n >> m >> a >> b;
int ans = ;
for (int e = ; e <= n-; e++) {
int tmp = ;
tmp = mul(tmp, A(n-, e-));
tmp = mul(tmp, C(m-, e-));
tmp = mul(tmp, fpow(m, n-e-));
tmp = mul(tmp, f(n, e+));
ans = add(ans, tmp);
}
cout << ans << endl;
return ;
}
好久没写博客了呀(计数器劝退),不过碰到好题还是忍不住要回来扯两句QwQ。
Codeforces1113F. Sasha and Interesting Fact from Graph Theory(组合数学 计数 广义Cayley定理)的更多相关文章
- Codeforces 1109D Sasha and Interesting Fact from Graph Theory (看题解) 组合数学
Sasha and Interesting Fact from Graph Theory n 个 点形成 m 个有标号森林的方案数为 F(n, m) = m * n ^ {n - 1 - m} 然后就 ...
- CF1109D Sasha and Interesting Fact from Graph Theory
CF1109D Sasha and Interesting Fact from Graph Theory 这个 \(D\) 题比赛切掉的人基本上是 \(C\) 题的 \(5,6\) 倍...果然数学计 ...
- Codeforces 1109D. Sasha and Interesting Fact from Graph Theory
Codeforces 1109D. Sasha and Interesting Fact from Graph Theory 解题思路: 这题我根本不会做,是周指导带飞我. 首先对于当前已经有 \(m ...
- Codeforces 1109D. Sasha and Interesting Fact from Graph Theory 排列组合,Prufer编码
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1109D.html 题意 所有边权都是 [1,m] 中的整数的所有 n 个点的树中,点 a 到点 b 的距离 ...
- Sasha and Interesting Fact from Graph Theory CodeForces - 1109D (图论,计数,Caylay定理)
大意: 求a->b最短路长度为m的n节点树的个数, 边权全部不超过m 枚举$a$与$b$之间的边数, 再由拓展$Caylay$定理分配其余结点 拓展$Caylay$定理 $n$个有标号节点生成k ...
- CF1109DSasha and Interesting Fact from Graph Theory(数数)
题面 传送门 前置芝士 Prufer codes与Generalized Cayley's Formula 题解 不行了脑子已经咕咕了连这么简单的数数题都不会了-- 首先这两个特殊点到底是啥并没有影响 ...
- Introduction to graph theory 图论/脑网络基础
Source: Connected Brain Figure above: Bullmore E, Sporns O. Complex brain networks: graph theoretica ...
- HDU6029 Graph Theory 2017-05-07 19:04 40人阅读 评论(0) 收藏
Graph Theory Time Limit: 2000/1000 M ...
- Graph Theory
Description Little Q loves playing with different kinds of graphs very much. One day he thought abou ...
随机推荐
- django数据库的表已迁移的不能重新迁移的解决办法
django.db.utils.InternalError: (1050, "Table 'tb_content' already exists") mysql数据库在迁移时数据库 ...
- UVa 11389 - The Bus Driver Problem 难度:0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- CSS可见区域全局居中
top:$(document).scrollTop() + ($(document).height() - $(document).scrollTop())/2,
- 记录PHP的执行时间
网上不少误导信息,实际上这个答案在PHP源码中的Zend文件夹下bench.php是有的 在此纠正下网络上复制粘贴造成的错误.希望后来人少踩点坑. function getmicrotime() { ...
- 电脑小白和ta的小白电脑——PowerDesigner的安装与破解
(一)下载 网盘链接:https://pan.baidu.com/s/1Ts_4D4LL7OukaMPgErp6ng 提取码:werf (二)安装 进入解压缩后的安装包文件夹: 1.双击运行Power ...
- unity解压缩zip发布后的一些问题
前段时间项目需要,搞了下zip的解压缩问题,也是利用ICSharpCode.SharpZipLib.dll来处理的zip,这里说下之前遇到的坑(这里提供我用的这个库ICSharpCode.SharpZ ...
- Python中字符串的处理方法
1.字符串 word = '字符串' sentence = "这是一个句子." paragraph = """这是一个段落, 可以由多行组成" ...
- openvas scanner 服务未启动修复
近日发现scan某个网段好久都没有report,到服务器上检查,发现openvassd服务未成功启动. openvas-setup -f systemctl -l |grep openv openva ...
- 移动端弹出层加遮罩后禁止body滑动
//实现滚动条无法滚动 var mo=function(e){e.preventDefault();}; /***禁止滑动***/ function stop(){ document.body.sty ...
- Docker多主机互联最佳实践
在公司使用docker多主机互联时碰到了各种坑.搞清楚后才发现如此简单,以下是根据实际经验的总结. 版本信息 Client: Version: 18.09.0 API version: 1.39 Go ...