1. 程式人生 > >[BZOJ2467] [中山市選2010]生成樹

[BZOJ2467] [中山市選2010]生成樹

return n-1 print mil while out 數據 rip color

Description

有一種圖形叫做五角形圈。一個五角形圈的中心有1個由n個頂點和n條邊組成的圈。在中心的這個n邊圈的每一條邊同時也是某一個五角形的一條邊,一共有n個不同的五角形。這些五角形只在五角形圈的中心的圈上有公共的頂點。如圖0所示是一個4-五角形圈。 現在給定一個n五角形圈,你的任務就是求出n五角形圈的不同生成樹的數目。還記得什麽是圖的生成樹嗎?一個圖的生成樹是保留原圖的所有頂點以及頂點的數目減去一這麽多條邊,從而生成的一棵樹。 註意:在給定的n五角形圈中所有頂點均視為不同的頂點。

Input

輸入包含多組測試數據。第一行包含一個正整數T,表示測試數據數目。每組測試數據包含一個整數n

( 2<=N<=100),代表你需要求解的五角形圈中心的邊數。

Output

對每一組測試數據,輸出一行包含一個整數x,表示n五角形圈的生成樹數目模2007之後的結果。

Sample Input

1
2

Sample Output

40
記得這題是高一寒假講的? 那時候我什麽都不會,上課不是在頹廢就是在睡覺。 我記得蘇卿念同學上去切了這道題Orz。 現在看來的確很水... 我們發現要想它成為一棵樹,每個五邊形必須切一次,切必須在中間的環上切至少一次。 所以答案就是$n \times 4 \times 5^{n-1}$。 就是切中間的環有$n$種切法,切掉的那一邊對應的五邊形有4種切法,剩下的都有5種切法。
誒,馬上要退役了,感慨萬分,當時為什麽不好好學呢...
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll T, n;
#define mod 2007
ll ksm(ll x, ll y) {
    ll res = 1;
    while(y)
    {
        if (y & 1) res = res * x % mod;
        x = x * x % mod;
        y >>= 1;
    }
    
return res; } int main() { cin >> T; while(T--) { scanf("%lld", &n); printf("%lld\n", n * 4 % mod * ksm(5, n - 1) % mod); } return 0; }

[BZOJ2467] [中山市選2010]生成樹