题目描述
- 题目背景
LLJ 热愛生成树。 - 题目描述
– 给出一个结点数为 N 的无向完全图,即任意结点两两相连,且每条边长为 1。LLJ 想知道这个图的生成树个数。
– 但这个数量太大了,LLJ 会懒得看,所以他只想看这个数量模 K 后的结果(若 K=0,输出-1 即可)
– 注:生成树定义:在图中节点数为 N,边数为 N-1 的连通子图。 - 输入
– 输入共一行,两个非负整数 N K;输出输出共一行一个整数,即方案数模 K 后的结果。 - 样例输入
– 样例输入 1
1 10
– 样例输入 2
4 13
– 样例输入 3
100 23 - 样例输出
– 样例输出 1
1
– 样例输出 2
3
– 样例输出 3
3 - 数据范围限制
对于 30%的数据: 0≤N≤10;
对于 60%的数据: 0≤N≤100;
对于 90%的数据: 0≤N≤1,000,000;
对于 100%的数据:0≤N≤10^18;0≤K≤1,000,000,007; - 题解:
这题其实是可以找规律的….记得特判一下就好。
由Cayley 定理,答案就是n的n-2次方。
代码:
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
long long n,mod;
long long mi(long long a,long long b){
long long ans=1;
while(b){
if(b&1)
ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
int main(){
cin>>n>>mod;
if(mod==0)
cout<<-1;
else if(n>2)
cout<<mi(n%mod,n-2);
else if(n==0)
cout<<0;
else
cout<<1;
return 0;
}