NYOJ127 星际之门(最小生成数的个数+高速幂)

Posted zsychanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NYOJ127 星际之门(最小生成数的个数+高速幂)相关的知识,希望对你有一定的参考价值。

题目描写叙述:

http://acm.nyist.net/JudgeOnline/problem.php?pid=127

能够证明。修建N-1条虫洞就能够把这N个星系连结起来。

如今。问题来了。皇帝想知道有多少种修建方案能够把这N个星系用N-1条虫洞连结起来?

 

输入
第一行输入一个整数T,表示測试数据的组数(T<=100)
每组測试数据仅仅有一行。该行仅仅有一个整数N。表示有N个星系。

(2<=N<=1000000)

输出
对于每组測试数据输出一个整数。表示满足题意的修建的方案的个数。

输出结果可能非常大,请输出修建方案数对10003取余之后的结果。

例子输入
2
3
4
例子输出
3
16

题目分析:

高速幂+全然图的最小生成树的个数,n个顶点的最小生成树的个数为n^(n-2)。


AC代码1 O(n):

 
/**
 *在一个n阶全然图的全部生成树的数量为n的n-2次方
 */
#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cctype>
#include<cstring>
#include<cmath>
#define MOD 10003
using namespace std;
int Sum(int n){
    int res=n;
    for(int i=1;i<=n-3;i++){
        res*=n;
        res%=MOD;
    }
    return res;
}
int main()
{
    int n,t;
    cin>>t;
    while(t--){
        cin>>n;
        if(n==2){//仅仅有一中
            cout<<"1"<<endl;
            continue;
        }
        int res=n;
        for(int i=1;i<=n-3;i++){
            res*=n;
            res%=MOD;
        }
        cout<<res<<endl;
    }
	return 0;
}
        
AC代码2 O(logn)

 
/**
 *在一个n阶全然图的全部生成树的数量为n的n-2次方
 */
#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cctype>
#include<cstring>
#include<cmath>
#define MOD 10003
using namespace std;
int Mod(int a,int b)//高速幂
{
    int ret=1;
    int tmp=a;
    while(b)
    {
       //奇数存在
       if(b&1) ret=ret*tmp%MOD;
       tmp=tmp*tmp%MOD;
       b>>=1;
    }
    return ret;
}
int main()
{
    int n,t;
    cin>>t;
    while(t--){
        cin>>n;
        if(n==2){//仅仅有一中
            cout<<"1"<<endl;
            continue;
        }
        /**
        int res=n;
        for(int i=1;i<=n-3;i++){
            res*=n;
            res%=MOD;
        }
        cout<<res<<endl;
        **/
        cout<<Mod(n,n-2)<<endl;
    }
	return 0;
}
        




以上是关于NYOJ127 星际之门(最小生成数的个数+高速幂)的主要内容,如果未能解决你的问题,请参考以下文章

nyoj 127 星际之门

nyoj473 A^B Problem (高速幂)

星际之门中地球人难道没有一个能够在太空作战的装备?

星际之门

星际之门是不是适用于物化视图?

ACM题目————星际之门