题目链接:传送门

思路:

  计数。树的结构和边权的计数可以分开讨论。

  ①假设从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定理)的更多相关文章

  1. 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} 然后就 ...

  2. CF1109D Sasha and Interesting Fact from Graph Theory

    CF1109D Sasha and Interesting Fact from Graph Theory 这个 \(D\) 题比赛切掉的人基本上是 \(C\) 题的 \(5,6\) 倍...果然数学计 ...

  3. Codeforces 1109D. Sasha and Interesting Fact from Graph Theory

    Codeforces 1109D. Sasha and Interesting Fact from Graph Theory 解题思路: 这题我根本不会做,是周指导带飞我. 首先对于当前已经有 \(m ...

  4. Codeforces 1109D. Sasha and Interesting Fact from Graph Theory 排列组合,Prufer编码

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF1109D.html 题意 所有边权都是 [1,m] 中的整数的所有 n 个点的树中,点 a 到点 b 的距离 ...

  5. Sasha and Interesting Fact from Graph Theory CodeForces - 1109D (图论,计数,Caylay定理)

    大意: 求a->b最短路长度为m的n节点树的个数, 边权全部不超过m 枚举$a$与$b$之间的边数, 再由拓展$Caylay$定理分配其余结点 拓展$Caylay$定理 $n$个有标号节点生成k ...

  6. CF1109DSasha and Interesting Fact from Graph Theory(数数)

    题面 传送门 前置芝士 Prufer codes与Generalized Cayley's Formula 题解 不行了脑子已经咕咕了连这么简单的数数题都不会了-- 首先这两个特殊点到底是啥并没有影响 ...

  7. Introduction to graph theory 图论/脑网络基础

    Source: Connected Brain Figure above: Bullmore E, Sporns O. Complex brain networks: graph theoretica ...

  8. HDU6029 Graph Theory 2017-05-07 19:04 40人阅读 评论(0) 收藏

    Graph Theory                                                                 Time Limit: 2000/1000 M ...

  9. Graph Theory

    Description Little Q loves playing with different kinds of graphs very much. One day he thought abou ...

随机推荐

  1. django数据库的表已迁移的不能重新迁移的解决办法

    django.db.utils.InternalError: (1050, "Table 'tb_content' already exists") mysql数据库在迁移时数据库 ...

  2. UVa 11389 - The Bus Driver Problem 难度:0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  3. CSS可见区域全局居中

    top:$(document).scrollTop() + ($(document).height() - $(document).scrollTop())/2,

  4. 记录PHP的执行时间

    网上不少误导信息,实际上这个答案在PHP源码中的Zend文件夹下bench.php是有的 在此纠正下网络上复制粘贴造成的错误.希望后来人少踩点坑. function getmicrotime() { ...

  5. 电脑小白和ta的小白电脑——PowerDesigner的安装与破解

    (一)下载 网盘链接:https://pan.baidu.com/s/1Ts_4D4LL7OukaMPgErp6ng 提取码:werf (二)安装 进入解压缩后的安装包文件夹: 1.双击运行Power ...

  6. unity解压缩zip发布后的一些问题

    前段时间项目需要,搞了下zip的解压缩问题,也是利用ICSharpCode.SharpZipLib.dll来处理的zip,这里说下之前遇到的坑(这里提供我用的这个库ICSharpCode.SharpZ ...

  7. Python中字符串的处理方法

    1.字符串 word = '字符串' sentence = "这是一个句子." paragraph = """这是一个段落, 可以由多行组成" ...

  8. openvas scanner 服务未启动修复

    近日发现scan某个网段好久都没有report,到服务器上检查,发现openvassd服务未成功启动. openvas-setup -f systemctl -l |grep openv openva ...

  9. 移动端弹出层加遮罩后禁止body滑动

    //实现滚动条无法滚动 var mo=function(e){e.preventDefault();}; /***禁止滑动***/ function stop(){ document.body.sty ...

  10. Docker多主机互联最佳实践

    在公司使用docker多主机互联时碰到了各种坑.搞清楚后才发现如此简单,以下是根据实际经验的总结. 版本信息 Client: Version: 18.09.0 API version: 1.39 Go ...