【題目背景】
llj熱愛生成樹。
【題目描述】
給出乙個結點數為n的無向完全圖,即任意結點兩兩相連,且每條邊長為1。llj想知道這個圖的生成樹個數。
但這個數量太大了,llj會懶得看,所以他只想看這個數量模k後的結果(若k=0,輸出-1即可)
注:生成樹定義:在圖中節點數為n,邊數為n-1的連通子圖。
【輸入】
輸入共一行,兩個非負整數n k;
【輸出】
輸出共一行乙個整數,即方案數模k後的結果。
【樣例輸入及輸出】
樣例編號
樣例輸入
樣例輸出11
102413
3100
23【資料範圍限制】
對於30%的資料: 0≤n≤10;
對於60%的資料: 0≤n≤100;
對於90%的資料: 0≤n≤1,000,000;
對於100%的資料:\(0\leq n\leq 10^\);\(0\leq k\leq 1,000,000,007\);
這題就是要找不同的有n個節點的樹的個數。
乍一看,毫無頭緒,我們不妨畫圖列舉一下吧!
n的值樹的個數
n=00
n=11
n=21
n=33
n=416
n=5125
n=61296
…………
我們不難發現乙個規律:
設\(a_i\)為n=i時的樹的個數,那麼嗯,問題似乎就解決了,不少心急的同學急忙打了乙個for迴圈的暴力**,交上去,結果就……\(a_i=i^\)
請注意題目中的一句話:
對於100%的資料:\(0\leq n\leq 10^\);\(0\leq k\leq 1,000,000,007\);迴圈那麼多次,不超時才怪!
怎麼辦?我們就要用一種神奇的東西——快速冪!
◔ ‸◔?快速冪是什麼?好吃嗎?
顧名思義,快速冪就是快速求\(n^m\)的一種演算法。
我們必須知道以下規律:
\(n^m=n^a\times n^b=n^\space\space(a+b=m)\)
\(n^m=n^)}}\space\space(2\mid m)\)
快速冪的思想就是:
這樣的時間複雜度就為\(o(\log_2n)\)(好快啊)
注意要邊做邊摸。
下面附上**:
#includeusing namespace std;
int main()
if(n<2)
t=n-2;n=n%k;
while(t>0)//快速冪部分
printf("%lld\n",s);
return 0;
}
六省聯考2017
luogu lojbzoj 顯然我們只需要考慮最後公布成績的那一天。列舉這一天,預處理字首和之後即可 o 1 計算最小代價。注意倒數第二個subtask這最優的日期就是 min b i 直接計算即可。如果套用通法會爆long long,但是開unsigned long long就行了 include...
題解 六省聯考2017
題目順序不是做題順序也不是考試順序更不是難度順序,是隨機順序。為了不影響 體驗決定把 刪去,需要請私信我,qq或皆可。題目裡的難度評分是個人評分,僅供參考開心就好。題意是給定期末考試每門課的出分時間和學生希望的出分時間,如果學生要等就會有不滿意度。你可以進行老師的增加和調換操作,但是都會產生不滿意度...
六省聯考2017 題解
t1 期末考試 題意 有 n 位同學,每位同學都參加了全部的 m 門課程的期末考試,都在焦急的等待成績的公布。第 i 位同學希望在第 t i 天或之前得知所有課程的成績。如果在第 t i 天,有至少一門課程的成績沒有公布,他就會等待最後公布成績的課程公布成績,每等待一天就會產生 c 不愉快度。對於第...