【luogu比赛】父子

题目描述

对于全国各大大学的男生寝室,总是有各种混乱的父子关系。

那么假设现在我们一个男生寝室有不同的 n 个人,每个人都至多有一个“爸爸”,可以有多个“儿子”,且有且只有一个人没有“爸爸”(毕竟是室长,还是要给点面子,当然了,室长人人当嘛)。

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


输入

第一行一个 正整数 t,表示有组数据。

接下来 t 行,每行一个整数 n,表示有 n 个人。


输出

共 t 行,每行一个整数,求关系个数。

由于答案可能较大,则我们需要输出答案对 1e9+9 取模的值。


样例输入

1
323


样例输出

283888610

 

 

对于 100% 的数据,t≤10^4n≤10^9

 



题解

由Cayley 公式:我们可以直接推出n个点的无向完全图的生成树的计数:nn-2 ,  即n个点的有标号无根树的计数。

再考虑有向,每个点都可以作为根节点,那么答案为: nn-1 

 

#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long

const int mod=1e9+9;
ll T,n;

ll qsm(ll a,ll n){
    ll ans=1;a%=mod;
    for(int i=n;i;i>>=1,a=(a*a)%mod)
    if(i&1) ans=(ans*a)%mod;
    return ans%mod;
}

int main(){
    cin>>T;
    while(T--){
        cin>>n;
        printf("%lld\n",qsm(n,n-1));
    }
    return 0;
}

 

posted @ 2018-10-29 19:54  rld  阅读(173)  评论(0)    收藏  举报