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

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

时间:2014-12-21 23:40:03      阅读:326      评论:0      收藏:0      [点我收藏+]

标签:nyoj   算法   

题目描述:

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   算法   

原文地址:http://blog.csdn.net/fool_ran/article/details/42065701

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