题目链接:传送门

思路:

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

  ①假设从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. result type

    <result-types> <result-type name="chain" class="com.opensymphony.xwork2.Acti ...

  2. xpath 在firefox,chrome中正常,在requests中不正常的解决。

    经多次测试发现: lxml中的etree格式化以后,直接使用firefox或chrome提取的xpath检索不到内容. 主要是因为tbody # 车种xpathczxx = '/html/body/t ...

  3. 通读SCRUM实战指南教材,提出5个问题。

    问题一:为什么要制定优先级的排定和调整? 创建一个排好优先级的项目组合并讲重点放在转移团队上,如果做得对,可以消除在项目数量超过团队能力 的情况下过于常见的多任务处理. 问题二:为什么我们要做文档? ...

  4. 阿里云已买到域名价格统计js代码

    var sum = 0; $('.table-hover tr.ng-scope').each(function(){ sum = sum + parseInt($(this).children()[ ...

  5. Oracle数据库字段数据拆分成多行(REGEXP_SUBSTR函数)

    做多选功能时为了简便,会在某个字段中存储多个值,保存时虽然省事,但后续的查询统计时还需要拆分数据才行,因此这时需要将字段内的值分成多行以便后续使用. 下面这个例子实现了字段内数据的拆分: --创建测试 ...

  6. 【Java集合系列五】HashMap解析

    2017-07-31 19:36:00 一.简介 1.HashMap作用及使用场景 HashMap利用数组+单向链表的方式,实现了key-value型数据的存储功能.HashMap的size永远是2^ ...

  7. STL中set的使用方法

    第一次想认真地学学set,是在我做一题treap的时候产生的念头.(HNOI2004 宠物收养场,洛谷P2286) 嗯,虽然学过一丢丢的treap和splay,但是这编程复杂度貌似有点高…… 无奈翻开 ...

  8. mybatis 报The content of elements must consist of well-formed character data or markup. 语法格式错误

    最近在写sql的时候 同时使用到了 >= 和 <= 之前只使用一个的时候 没有什么问题,今天同时使用到了两个,结果xml出现了The content of elements must co ...

  9. 安装vue脚手架和vue安装element-ui

    首先下载安装node.js,因为vue依赖node.js,然后用npm安装vue,步骤如下: 安装成功后安装element-UI,步骤如下: 完成后用npm run dev 运行项目.

  10. IT技术

    一.通信网络 TCP/IP协议 路由交换技术 二.编程语言 C/C++ python JAVA 三.数据库 关系型数据库 (1)MySQL  MySQL学习笔记一 MySQL学习笔记二 2.  非关系 ...