【bzoj4894】天赋 矩阵树定理
题目描述
输入
输出
第一行一个整数,问题所求的方案数。
样例输入
8
01111111
00101001
01010111
01001111
01110101
01110011
01111100
01110110
样例输出
72373
题解
矩阵树定理
读明白题以后发现求的就是外向树形图的个数,于是使用矩阵树定理解决。
与求生成树个数不同的是,外向树形图用的矩阵是 入度矩阵-邻接矩阵 ,并且删去的一行一列不能随便选择,必须是根所在的那一行那一列。
然后高斯消元求一下行列式的值即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 310
#define mod 1000000007
using namespace std;
typedef long long ll;
ll a[N][N];
char str[N];
inline ll pow(ll x , ll y)
{
ll ans = 1;
while(y)
{
if(y & 1) ans = ans * x % mod;
x = x * x % mod , y >>= 1;
}
return ans;
}
int main()
{
int n , i , j , k , d = 0;
ll t , ans = 1;
scanf("%d" , &n);
for(i = 0 ; i < n ; i ++ )
{
scanf("%s" , str);
for(j = 0 ; j < n ; j ++ )
if(str[j] == '1')
a[j][j] ++ , a[i][j] -- ;
}
for(i = 1 ; i < n ; i ++ )
{
for(j = i ; j < n ; j ++ )
if(a[j][i])
break;
if(j >= n) continue;
if(j != i)
for(d ^= 1 , k = i ; k < n ; k ++ )
swap(a[i][k] , a[j][k]);
ans = ans * a[i][i] % mod;
for(t = pow(a[i][i] , mod - 2) , j = i ; j < n ; j ++ ) a[i][j] = a[i][j] * t % mod;
for(j = i + 1 ; j < n ; j ++ )
for(t = a[j][i] , k = i ; k < n ; k ++ )
a[j][k] = (a[j][k] - a[i][k] * t % mod + mod) % mod;
}
for(i = 1 ; i < n ; i ++ ) ans = ans * a[i][i] % mod;
if(d) ans = (mod - ans) % mod;
printf("%lld\n" , ans);
return 0;
}
【bzoj4894】天赋 矩阵树定理的更多相关文章
- BZOJ4894:天赋(矩阵树定理)
Description 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有一些天赋必须是要有前置天赋才能够学习得到的. 也就是说,有一些天赋必须是要在 ...
- 【BZOJ4894】天赋(矩阵树定理)
[BZOJ4894]天赋(矩阵树定理) 题面 BZOJ Description 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有 一些天赋必须是要有 ...
- @总结 - 7@ 生成树计数 —— matrix - tree 定理(矩阵树定理)与 prüfer 序列
目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 矩阵树定理主体@ @证明 part - 1@ @证明 part - 2@ @证明 part - 3@ @证明 part ...
- [spoj104][Highways] (生成树计数+矩阵树定理+高斯消元)
In some countries building highways takes a lot of time... Maybe that's because there are many possi ...
- BZOJ 4766: 文艺计算姬 [矩阵树定理 快速乘]
传送门 题意: 给定一个一边点数为n,另一边点数为m,共有n*m条边的带标号完全二分图$K_{n,m}$ 求生成树个数 1 <= n,m,p <= 10^18 显然不能暴力上矩阵树定理 看 ...
- bzoj 4596 [Shoi2016]黑暗前的幻想乡 矩阵树定理+容斥
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 559 Solved: 325[Submit][Sta ...
- 【LOJ#6072】苹果树(矩阵树定理,折半搜索,容斥)
[LOJ#6072]苹果树(矩阵树定理,折半搜索,容斥) 题面 LOJ 题解 emmmm,这题似乎猫讲过一次... 显然先\(meet-in-the-middle\)搜索一下对于每个有用的苹果数量,满 ...
- 2019.01.02 bzoj2467: [中山市选2010]生成树(矩阵树定理)
传送门 矩阵树定理模板题. 题意简述:自己看题面吧太简单懒得写了 直接构建出这4n4n4n个点然后按照题面连边之后跑矩阵树即可. 代码: #include<bits/stdc++.h> # ...
- [CF917D]Stranger Trees[矩阵树定理+解线性方程组]
题意 给你 \(n\) 个点的无向完全图,指定一棵树 \(S\),问有多少棵生成树和这棵树的公共边数量为 \(k\in[0,n-1]\) \(n\leq 100\) 分析 考虑矩阵树定理,把对应的树边 ...
随机推荐
- linux服务器安装nginx及使用
Nginx在个人的使用之后,感觉非常的方便,所以在这里给出自己安装配置方案.它是一款高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器.负载均衡是个不错的选择. ...
- 经典sql语句汇总
1,某条数据放首位,其他倒序并分页 select * from Student order by( case when id='2' then 1 ELSE 4 END),id desc l ...
- Percona-Tookit工具包之pt-sift
Preface We've got a lot of files related with system performance which generated by pt-stalk ...
- Anaconda下安装 TensorFlow 和 keras 以及连接pycharm
首先在官网下载Anaconda https://www.anaconda.com/download/ 安装时注意 勾选第一个,增加环境变量 安装好后再windows界面打开Anaconda Promp ...
- 解决Cannot reinitialise DataTable问题 解决dataTables再次调用不能清空数据
这里我们只需要多设置一个字段 “destroy" : true 即可 或者设置retrieve: true, 或者在加载datatable之前使用$("#example" ...
- 汇编:输出寄存器AX中的内容
DATAS segment Temp db '0000H','$' DATAS ends CODES segment START: mov AX,DATAS mov DS,AX ;正式代码开始 mov ...
- nginx配置安装
先安装pcrepcre作用是让Nginx支持Rewrite功能下载地址:https://sourceforge.net/projects/pcre/files/pcre/,选择最新版本进行下载下载之后 ...
- js开发中常用小技巧
1.获取指定范围内的随机数 function getRadomNum(min,max){ return Math.floor(Math.random() * (max - min + 1)) + mi ...
- tcl之正则表达式
- Redis ---------- key的操作
key命名规则 除空格和\n,其他都可以 select db -index选择数据库 例1 select 5 例2 type 查看数据key类型 type name 例3 keys pat ...