P4981 父子(树的组成情况+Cayley公式)

传送门

题目描述:

那么现在问题来了,对于一个有 n 个人的寝室,最多可能存在多少种父子关系,当然每个人之间都必须要有直接或间接的父子关系。

思路:Cayley公式:

对于n个不同的节点,能够组成的无根树(原来是无向连通图或者是有标志节点的树)的种数是n^(n2)种。(这里让大家好理解一点,就写成了无根树,其实应该是一样的概念)

把有根树转换成根节点有n种情况的无根树,也就是n^(n2)×n,化简就是n^(n1)。答案也就是这个玩意了。

再用快速幂求解

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 10000005;
const ll inf = 0x3f3f3f3f;
const ll mod = 1e9+9;
ll qpow(ll a, ll n, ll p) {
    ll res = 1;
    while (n) {
        if (n & 1)res = (res * a) % p;
        a = (a * a) % p;
        n >>= 1;
    }
    return res;
}
int main() {
    int t; scanf("%d", &t);
    while (t--) {
        ll n; scanf("%lld", &n);
        cout << qpow(n, n - 1, mod) << endl;
    }
    return 0;
}

 

posted @ 2021-05-05 14:54  cono奇犽哒  阅读(100)  评论(0编辑  收藏  举报