【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;
}
posted @ 2019-07-22 07:57  Dup4  阅读(158)  评论(0)    收藏  举报