专栏文章
SP1870 MKLABELS 题解
SP1870题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipaz2p3
- 此快照首次捕获于
- 2025/12/03 09:02 3 个月前
- 此快照最后确认于
- 2025/12/03 09:02 3 个月前
题目大意
计算给定节点数 的树的不同标记方式的数量。这里的“不同标记方式”指的是非同构的标记树的数量,即考虑树的自同构群的影响。
思路分析
这道题可以通过一种非常简单的方法来解决,通过凯莱公式来做。很多人可能连这是什么的不知道,那我们就先来了解一下凯莱公式。
凯莱公式简介
令 为顶点集合,并令 为有 个顶点的标记树的数量。我们可以通过枚举法,在 较小时验证此公式,如 。


证明这里便不再详细讲述,如果有兴趣可以自己下去查。
相信当你知道了凯莱公式之后,这道题便可以轻松解决了,只需要将凯莱公式带入程序中满足就行了。
参考代码
CPP#include<bits/stdc++.h>
#define int long long
#define Rint register int
#define fast_running ios::sync_with_stdio(false),std::cin.tie(0),std::cout.tie(0)
using namespace std;
signed main() {
fast_running;
int n, cnt = 0;
while (cin >> n && n != 0) {
++cnt;
cout << "Case " << cnt << ", N = " << n << ", # of different labelings = " << (int)(pow(n, n - 2)) << '\n';
//这里如果用 pow 函数需要强制类型转化,不然可能会用科学计数法输出
/*也可以这样:
int out = pow(n, n - 2);
cout << out << '\n';
*/
//当然也可以自己写一个 “pow”
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...