【Matrix-tree定理】【BEST Theorem】hdu6064 RXD and numbers
题意:给你一张有向图,求从1出发,回到1的欧拉回路数量。
先特判掉欧拉回路不存在时的情况。
看这个吧:http://blog.csdn.net/yuanjunlai141/article/details/76691680。
这是求有向图(以某个点为根的)生成外向树的方法。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll MOD=998244353ll;
int n,a[405][405],chu[405],ru[405];
ll A[405][405],jc[200005];
int sum;
bool vis[405];
void dfs(int U){
++sum;
vis[U]=1;
for(int i=1;i<=n;++i){
if(a[U][i] && !vis[i]){
dfs(i);
}
}
}
ll Quick_Pow(ll a,ll p){
if(!p){
return 1ll;
}
ll res=Quick_Pow(a,p>>1);
res=res*res%MOD;
if((p&1ll)==1ll){
res=a%MOD*res%MOD;
}
return res;
}
ll guass_jordan()
{
if(n==2){
return A[2][2];
}
for(int i=2;i<=n;++i){
for(int j=2;j<=n;++j){
A[i-1][j-1]=A[i][j];
}
}
ll res=1;
for(int i=1;i<n;++i)
{
int pivot=i;
for(int j=i+1;j<n;++j)
if(A[j][i]){
pivot=j;
break;
}
swap(A[i],A[pivot]);
if(i!=pivot){
res=res*(MOD-1ll)%MOD;
}
if(A[i][i]==0){
return 0;
}
ll ni=Quick_Pow(A[i][i],MOD-2ll);
for(int j=i+1;j<n;++j)
A[i][j]=A[i][j]*ni%MOD;
res=res*A[i][i]%MOD;
for(int j=1;j<n;++j)
if(i!=j)
for(int k=i+1;k<n;++k)
A[j][k]=(A[j][k]-A[j][i]*A[i][k]%MOD+MOD)%MOD;
}
return res;
}
int main(){
// freopen("hdu6064.in","r",stdin);
jc[0]=1;
for(int i=1;i<=200000;++i){
jc[i]=jc[i-1]*(ll)i%MOD;
}
int zu=0;
while(scanf("%d",&n)!=EOF){
++zu;
printf("Case #%d: ",zu);
if(n==1){
puts("1");
continue;
}
memset(A,0,sizeof(A));
memset(chu,0,sizeof(chu));
memset(ru,0,sizeof(ru));
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
scanf("%d",&a[i][j]);
}
}
bool flag=1;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
ru[i]+=a[j][i];
chu[i]+=a[i][j];
if(j!=i){
A[i][i]=(A[i][i]+(ll)a[j][i])%MOD;
if(a[i][j]){
A[i][j]=MOD-a[i][j];
}
}
}
if(ru[i]!=chu[i]){
flag=0;
break;
}
}
if(!flag){
puts("0");
continue;
}
sum=0;
memset(vis,0,sizeof(vis));
dfs(1);
if(sum!=n){
puts("0");
continue;
}
ll ans=guass_jordan()*jc[ru[1]]%MOD;
for(int i=2;i<=n;++i){
ans=ans*jc[(ru[i]-1)]%MOD;
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
ans=ans*Quick_Pow(jc[a[i][j]],MOD-2ll)%MOD;
}
}
printf("%lld\n",ans);
}
return 0;
}
【Matrix-tree定理】【BEST Theorem】hdu6064 RXD and numbers的更多相关文章
- BZOJ.4031.[HEOI2015]小Z的房间(Matrix Tree定理 辗转相除)
题目链接 辗转相除解行列式的具体实现? 行列式的基本性质. //864kb 64ms //裸的Matrix Tree定理.练习一下用辗转相除解行列式.(因为模数不是质数,所以不能直接乘逆元来高斯消元. ...
- [bzoj1016][JSOI2008]最小生成树计数 (Kruskal + Matrix Tree 定理)
Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...
- @总结 - 7@ 生成树计数 —— matrix - tree 定理(矩阵树定理)与 prüfer 序列
目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 矩阵树定理主体@ @证明 part - 1@ @证明 part - 2@ @证明 part - 3@ @证明 part ...
- 【证明与推广与背诵】Matrix Tree定理和一些推广
[背诵手记]Matrix Tree定理和一些推广 结论 对于一个无向图\(G=(V,E)\),暂时钦定他是简单图,定义以下矩阵: (入)度数矩阵\(D\),其中\(D_{ii}=deg_i\).其他= ...
- 数学-Matrix Tree定理证明
老久没更了,冬令营也延期了(延期后岂不是志愿者得上学了?) 最近把之前欠了好久的债,诸如FFT和Matrix-Tree等的搞清楚了(啊我承认之前只会用,没有理解证明--),FFT老多人写,而Matri ...
- SPOJ.104.Highways([模板]Matrix Tree定理 生成树计数)
题目链接 \(Description\) 一个国家有1~n座城市,其中一些城市之间可以修建高速公路(无自环和重边). 求有多少种方案,选择修建一些高速公路,组成一个交通网络,使得任意两座城市之间恰好只 ...
- HDU 4305 Lightning Matrix Tree定理
题目链接:https://vjudge.net/problem/HDU-4305 解法:首先是根据两点的距离不大于R,而且中间没有点建立一个图.之后就是求生成树计数了. Matrix-Tree定理(K ...
- BZOJ.4894.天赋(Matrix Tree定理 辗转相除)
题目链接 有向图生成树个数.矩阵树定理,复习下. 和无向图不同的是,度数矩阵改为入度矩阵/出度矩阵,分别对应外向树/内向树. 删掉第i行第i列表示以i为根节点的生成树个数,所以必须删掉第1行第1列. ...
- BZOJ.1016.[JSOI2008]最小生成树计数(Matrix Tree定理 Kruskal)
题目链接 最小生成树有两个性质: 1.在不同的MST中某种权值的边出现的次数是一定的. 2.在不同的MST中,连接完某种权值的边后,形成的连通块的状态是一样的. \(Solution1\) 由这两个性 ...
随机推荐
- 【洛谷 P2763】 试题库问题(最大流)
题目链接 6/23 这是网络流23题里我第一个没看题解自己写出来一遍过的.. 这题应该是最简单的模型了吧. 从源点向每个类型连一条流量为这个类型要的题数,再从每个类型向可以属于这个类型的所有试题连一条 ...
- JSP九大内置对象,七大动作,三大指令
JSP之九大内置对象 隐藏对象入门探索 Servlet 和JSP中输出数据都需要使用out对象.Servlet 中的out对象是通过getWriter()方法获取的.而JSP中没有定义out对象却可以 ...
- 25个Linux相关的网站【转】
转自:http://www.cnblogs.com/Lindaman/p/4552805.html 下面是25个最具有影响力,也是最重要的Linux网站,这些网站提供了Linux的分发包,软件,文件, ...
- [转载]关于python字典类型最疯狂的表达方式
一个Python字典表达式谜题 让我们探究一下下面这个晦涩的python字典表达式,以找出在python解释器的中未知的内部到底发生了什么. # 一个python谜题:这是一个秘密 # 这个表达式计算 ...
- C++ 流操作符重载函数
1. 问题 在C++中,在进行输入输出操作时,我们首先会想到用cout, cin这两个库操作语句来实现,比如 cout << 8 << "hello world!&q ...
- MYSQL有外键无法删除
今天删除数据库中数据,提示因为设置了foreign key,无法修改删除 可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHECKS=0; 删除 ...
- 关于ueditor在Java中文件上传问题,404问题
问题困扰了两天,部署要求导入到webcontent下,我导入到了整个项目目录下,自己粗心犯错,导致页面访问不到404. 解决了上面的问题,试着进行文件上传,却一直找不到图片: 调出浏览器控制台: 刚开 ...
- ES Java 客户端
标签(空格分隔): ES Java 客户端 节点客户端(node client): 节点客户端本身也是一个ES节点(一般不保存数据,不能成为主节点),它能以无数据节点身份加入到集群中.因为它是集群环境 ...
- telent
telnet ip 空格 port ctrl+] 进入 命令后 quit 退出 在linux/unix下使用telnet hostname port连接上主机后会提示Escape chara ...
- python 函数内置方法short_desc
1. 给函数设置一个文本 def action_checked(self, request): pass action_checked.short_desc = "签到" # sh ...