「雅礼集训2017」共

传送门

把这棵树分为奇数深度点和偶数深度点两部,显然形成二分图。

我们先选出 kk 个点作为奇数深度的点,由于 11 号点必须是奇数深度,所以方案就是 (n1k1)(n1k1)

考虑 pruferprufer 序列,我们不难发现奇数深度点总共出现 n1kn1k 次,偶数深度点总共出现 k1k1 次,那么就是 kn1k(nk)k1kn1k(nk)k1

最后的答案就是 (n1k1)kn1k(nk)k1(n1k1)kn1k(nk)k1

参考代码:

Copy
#include <cstdio> const int _ = 5e5 + 5; int n, k, p, fac[_], ifc[_]; int C(int N, int M) { return 1ll * fac[N] * ifc[M] % p * ifc[N - M] % p; } int power(int x, int k) { int res = 1; for (; k; k >>= 1, x = 1ll * x * x % p) if (k & 1) res = 1ll * res * x % p; return res % p; } int main() { scanf("%d %d %d", &n, &k, &p); fac[0] = ifc[0] = ifc[1] = 1; for (int i = 1; i <= n; ++i) fac[i] = 1ll * fac[i - 1] * i % p; for (int i = 2; i <= n; ++i) ifc[i] = 1ll * (p - p / i) * ifc[p % i] % p; for (int i = 1; i <= n; ++i) ifc[i] = 1ll * ifc[i - 1] * ifc[i] % p; printf("%lld\n", 1ll * C(n - 1, k - 1) * power(k, n - k - 1) % p * power(n - k, k - 1) % p); return 0; }
posted @   Sangber  阅读(200)  评论(0编辑  收藏  举报
编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
· 用 C# 插值字符串处理器写一个 sscanf
历史上的今天:
2019-06-11 「NOI2015」软件包管理器
2019-06-11 「USACO5.5」矩形周长Picture
点击右上角即可分享
微信分享提示