BZOJ 4766: 文艺计算姬 [矩阵树定理 快速乘]
2017-03-08 16:49
176 查看
传送门
题意:
给定一个一边点数为n,另一边点数为m,共有n*m条边的带标号完全二分图$K_{n,m}$
求生成树个数
1 <= n,m,p <= 10^18
显然不能暴力上矩阵树定理
看过推到完全图的生成树个数后这道题也不难做
构建出基尔霍夫矩阵,找一个主子式,所有行加起来放一行上,用这一行消消消就发现最后对角线上有$n-1$个$m$和$m-1$个$n$和$1$个$1$
然后要用快速乘...蒟蒻第一次用快速乘...
题意:
给定一个一边点数为n,另一边点数为m,共有n*m条边的带标号完全二分图$K_{n,m}$
求生成树个数
1 <= n,m,p <= 10^18
显然不能暴力上矩阵树定理
看过推到完全图的生成树个数后这道题也不难做
构建出基尔霍夫矩阵,找一个主子式,所有行加起来放一行上,用这一行消消消就发现最后对角线上有$n-1$个$m$和$m-1$个$n$和$1$个$1$
然后要用快速乘...蒟蒻第一次用快速乘...
#include <iostream> using namespace std; typedef long long ll; ll n,m,P; inline void mod(ll &x){if(x>=P) x-=P;} inline ll Mul(ll a,ll b){ ll re=0; for(;b;b>>=1,mod(a+=a)) if(b&1) mod(re+=a); return re; } inline ll Pow(ll a,ll b){ ll re=1; for(;b;b>>=1,a=Mul(a,a)) if(b&1) re=Mul(re,a); return re; } int main(){ //freopen("in","r",stdin); cin>>n>>m>>P; cout<<Mul(Pow(n,m-1),Pow(m,n-1)); }
相关文章推荐
- [bzoj4766][矩阵树][快速乘][prufer]文艺计算姬
- bzoj 4766: 文艺计算姬 -- 快速乘
- [BZOJ Contest-2017省队十连测推广赛1·T2][BZOJ4766][完全二分图的生成树个数]文艺计算姬
- bzoj 4766: 文艺计算姬 矩阵树定理+快速幂
- [bzoj4766]文艺计算姬——完全二分图生成树个数
- [bzoj4766]文艺计算姬【prufer序列】
- BZOJ 4766(文艺计算姬-矩阵树定理+找规律)
- BZOJ 4766: 文艺计算姬
- 【BZOJ】4766: 文艺计算姬
- 【BZOJ4766】文艺计算姬
- [Bzoj4766]文艺计算姬
- BZOJ 4766 文艺计算姬 Prufer序列
- BZOJ 4766: 文艺计算姬 prufer编码
- bzoj 4766: 文艺计算姬 矩阵树定理
- [完全二分图生成树个数] BZOJ 4766 文艺计算姬
- [bzoj4766]文艺计算姬
- 【BZOJ4766】文艺计算姬 [暴力]
- BZOJ.4766.文艺计算姬(Prufer)
- bzoj 4000 矩阵快速幂优化DP
- BZOJ 1002: [FJOI2007]轮状病毒 递推/基尔霍夫矩阵树定理