NYOJ127 - 星際之門(一)(n個節點的完全樹有n^n-2個最小生成樹)

【題目】

星際之門(一)

時間限制:3000 ms  |            內存限制:65535 KB
難度:3
描述

公元3000年,子虛帝國統領着N個星系,原先它們是靠近光束飛船來進行旅行的,近來,X博士發明了星際之門,它利用蟲洞技術,一條蟲洞可以連通任意的兩個星系,使人們不必再待待便可立刻到達目的地。

帝國皇帝認爲這種發明很給力,決定用星際之門把自己統治的各個星系連結在一起。

可以證明,修建N-1條蟲洞就可以把這N個星系連結起來。

現在,問題來了,皇帝想知道有多少種修建方案可以把這N個星系用N-1條蟲洞連結起來?

 

輸入
第一行輸入一個整數T,表示測試數據的組數(T<=100)
每組測試數據只有一行,該行只有一個整數N,表示有N個星系。(2<=N<=1000000)
輸出
對於每組測試數據輸出一個整數,表示滿足題意的修建的方案的個數。輸出結果可能很大,請輸出修建方案數對10003取餘之後的結果。
樣例輸入
2
3
4
樣例輸出
3
16

【AC CODE】4ms

#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#define rep(i,a,n) for(int i = a; i < n; i++)
#define repe(i,a,n) for(int i = a; i <= n; i++)
#define clc(a,b) memset(a,b,sizeof(a))
#define MOD 10003

int pow_mod(int a, int n)//遞歸
{
	if(!n) return 1;
	int x = pow_mod(a,n>>1);
	long long ans = (long long)x*x%MOD;
	if(n&1) ans = ans*a%MOD;
	return (int)ans;
}
int main()
{
#ifdef SHY
	freopen("e:\\1.txt", "r", stdin);
#endif
	int t;
	scanf("%d%*c", &t);
	while(t--)
	{
		int n;
		scanf("%d%*c", &n);
		printf("%d\n", pow_mod(n,n-2));
	}
	return 0;
}


 

發佈了95 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章