【2019银联高校极客挑战赛 初赛 第二场】C. 异世界幻想
题意:
询问在所有点数为\(N\)的有标号无根树中,一共有多少叶子结点?
思路:
考虑计算每个点的贡献,我们可以单独把这个点提出来,它的贡献是剩下的\(n - 1\)个点构成的有标号的无根树的方案数乘上\(n - 1\),因为可以接在任意一个节点后面成为一个叶子结点。
\(n\)个点的有标号无根树的方案数是\(n^{n - 2}\)
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll p = 998244353;
ll qmod(ll base, ll n) {
ll res = 1;
while (n) {
if (n & 1) res = res * base % p;
base = base * base % p;
n >>= 1;
}
return res;
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
if (n == 1) printf("1\n");
else if (n == 2) puts("2");
else {
printf("%lld\n", 1ll * n * (n - 1) % p * qmod(n - 1, n - 3) % p);
}
}
return 0;
}

浙公网安备 33010602011771号