【题目】给定两边节点数为n和m的完全二分图,求生成树数取模给定的p。n,m,p<=10^18。

【算法】生成树计数(矩阵树定理)

【题解】参考自 [bzoj4766]文艺计算姬 by WerKeyTom_FTD

构造完全二分图的基尔霍夫矩阵的余子式如下(去除第一行第一列):n=3,m=3,空白格皆为0

为了消项形成倒三角,将所有其它n+m-1行全部加到第n行上,则有:

然后将第n行叠加到前面n-1行上,形成倒三角:

虽然不是完全的倒三角,但因为其它排列的积为0所以没有影响,那么主对角线上的乘积就是答案。

ans=n^(m-1)*m^(n-1)

#include<cstdio>
#define ll long long
ll n,m,MOD;
ll mul(ll x,ll k){
ll ans=;x%=MOD;
while(k){
if(k&)ans=(ans+x)%MOD;
x=(x+x)%MOD;
k>>=;
}
return ans;
}
ll power(ll x,ll k){
ll ans=;
while(k){
if(k&)ans=mul(ans,x);
x=mul(x,x);
k>>=;
}
return ans;
}
int main(){
scanf("%lld%lld%lld",&n,&m,&MOD);
printf("%lld",mul(power(n,m-),power(m,n-)));
return ;
}

全程long long的运算必须快速乘+快速幂。

最新文章

  1. THINKPHP源码学习--------验证码类
  2. Effective Java Second Edition --- Builder Pattern
  3. HDU 1005 Number Sequence
  4. C复数的四则运算
  5. UNIX/Linux网络编程基础:图解TCP/IP协议栈
  6. lintcode 中等题:Submatrix sum is 0 和为零的子矩阵
  7. ReactNative环境搭建
  8. ###Linux基础 - 2
  9. XCODE 控件连接(关联)不上变量 怎么解决
  10. PHP: 异常exception
  11. Java程序打开指定地址网页
  12. python之总体理解
  13. unity 竖屏不能全屏显示
  14. [信号处理技术]关于EMD的产生
  15. 前端之DOM
  16. mysql索引知识简单记录
  17. docker学习(一)
  18. Android目录结构及作用
  19. CSS 基础 例子 图片拼合技术
  20. ios中LeveyPopListView 弹出view的用法

热门文章

  1. DNS缓存服务器的配置步骤
  2. inno setup 打包exe程序
  3. HttpWebRequest 保存Cookies,模拟Session登录
  4. Qt消息机制和事件
  5. window上安装elasticserach
  6. 使用expect实现自动登录的脚本
  7. ER-18
  8. Python3 字典 get() 方法
  9. Vue项目SEO优化的另一种姿态
  10. JAVA导出Excel(支持多sheet)