码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-04-15 21:57:55      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:sum   while   acm   queue   cto   define   顶点   map   ref   

题目描写叙述:

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 星际之门(一)(最小生成数的个数+高速幂)

标签:sum   while   acm   queue   cto   define   顶点   map   ref   

原文地址:http://www.cnblogs.com/zsychanpin/p/6715655.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!