省選專練之文藝計算姬
阿新 • • 發佈:2018-11-02
“奮戰三星期,造臺計算機”。小W響應號召,花了三星期造了臺文藝計算姬。
文藝計算姬比普通計算機有更多的藝術細胞。 普通計算機能計算一個帶標號完全圖的生成樹個數,而文藝計算姬能計算一個帶標號完全二分圖的生成樹個數。
更具體地,給定一個一邊點數為n,另一邊點數為m,共有n*m條邊的帶標號完全二分圖K_{n,m},計算姬能快速算出其生成樹個數。
小W不知道計算姬算的對不對,你能幫助他嗎?
這實際上是喜聞樂見的**計數類問題
這道題的解決方法是Prufer序列
我們知道在求一棵樹的Prufer序列的時候還剩下最後兩個點
他們必然是兩個劃分集合中的
而此時說明有n-1個和m-1個被選了
那麼按照Prufer的性質
一個點出現了幾次和他的度數有關
那麼這個點出現幾次可以隨便選
為:
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; typedef long long LL; LL mod,n,m; LL mul(LL A,LL B){ LL ret=0; while(B){ if(B&1)ret=(ret+A)%mod; A=(A+A)%mod; B=B>>1; } return ret; } LL Quick_Pow(LL x,LL k){ LL ret=1; while(k){ if(k&1)ret=mul(ret,x)%mod; x=mul(x,x)%mod; k=k>>1; } return ret; } int main(){ cin>>n>>m>>mod; cout<<mul(Quick_Pow(n,m-1),Quick_Pow(m,n-1)); }