BZOJ 4766文学コンピューティングチー

リンク
考慮Prufer配列は、最後の残りの二つの点を要約側との間に接続されていない、それは二部グラフの両側に位置しなければなりません。
我々はポイントが取り付けられ、次いでPrufer点列を追加するたびに削除され、配列はPruferなければならないので(\ N-1)\番目と右点(M-1 \)\番目左点。
我々はポイントに表示されますPruferシーケンスを選択したときに見つけることができるか少しシミュレートは、スパニングツリーが完全に一つだけの置換方式があり、他の言葉Pruferシーケンスで、決定されました。
したがって、全体的なプログラムである(^ {N-M} 1-M-N - ^ {}。1 \)\

#include<cstdio>
typedef long long i64;
i64 n,m,p;
i64 inc(i64 a,i64 b){return (a+b)%p;}
i64 mul(i64 a,i64 k){i64 r=0;for(;k;k>>=1,a=inc(a,a))if(k&1)r=inc(a,r);return r;}
i64 pow(i64 a,i64 k){i64 r=1;for(;k;k>>=1,a=mul(a,a))if(k&1)r=mul(a,r);return r;}
int main(){scanf("%lld%lld%lld",&n,&m,&p),printf("%lld",mul(pow(n,m-1),pow(m,n-1)));}

おすすめ

転載: www.cnblogs.com/cjoierShiina-Mashiro/p/12240817.html