码迷,mamicode.com
首页 > 其他好文 > 详细

矩阵树定理

时间:2020-06-29 23:10:24      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:--   等于   stdin   info   ref   ++   lazy   char   har   

数论 矩阵树定理

0.1 简介

矩阵树定理是一个受限很窄的定理,基本上题目中有任何其它的限制条件,矩阵树就不是正解(#`-_ゝ-)

但是..但是..人家逼格高啊ˋ( ° ▽、° )

1.1 基尔霍夫矩阵

(一) 对于图上的\(n\)个结点,矩阵大小为\(n\times n\)

(二) 对称线\((i,i)\)上的数字,大小为结点\(i\)的度数;非对称线上的点\((i,j)\),若存在边则为\(-1\),无边则为\(0\)

举个小例孑:

技术图片

2.1 矩阵树定理

余孑式:方阵删除\(i\)\(j\)后剩下的行列式的值

主余孑式: 方阵删除\(i\)\(i\)后剩下的行列式的值

矩阵树定理:图\(G\)的生成树个数等于该图基尔霍夫矩阵的主余孑式

图论、线性代数..就这么联系起来了..数学的强大ㄟ( ▔, ▔ )ㄏ

3.1 例题:[HEOI2015]小Z的房间

P4111 [HEOI2015]小Z的房间

比较裸的矩阵树定理,直接套用即可

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define lor(a,b,c) for(register int a=b;a<=c;++a)
#define ror(a,b,c) for(register int a=c;a>=b;--a)

const int MAXB=10,MAX=100;
const ll MOD=1e9;

int n,m,cnt;
char info[MAXB][MAXB];
int ind[MAXB][MAXB],f[MAX][MAX];
ll ans=1;

inline char getc();

int main(){
	#ifndef ONLINE_JUDGE
	freopen("test.in","r",stdin);
	#endif
	
	scanf("%d%d",&n,&m);
	lor(i,1,n) lor(j,1,m) info[i][j]=getc();
	lor(i,1,n) lor(j,1,m) ind[i][j]=info[i][j]==‘.‘?++cnt:cnt;
	lor(i,1,n) lor(j,1,m) if(info[i][j]==‘.‘){
		if(info[i-1][j]==‘.‘){
			int u=ind[i-1][j],v=ind[i][j];
			f[u][v]=f[v][u]=-1; f[u][u]++; f[v][v]++;
		}
		if(info[i][j-1]==‘.‘){
			int u=ind[i][j-1],v=ind[i][j];
			f[u][v]=f[v][u]=-1; f[u][u]++; f[v][v]++;
		}
	}
	cnt--;
	
	lor(i,1,cnt){
		int pos=0;
		lor(j,i,cnt) if(f[j][i]) {pos=j; break;}
		if(!pos) {ans=0; break;}
		lor(j,i,cnt) swap(f[i][j],f[pos][j]);
		if(i!=pos) ans=-ans;
		lor(j,i+1,cnt){
			while(f[j][i]){
				swap(f[i],f[j]);
				ll t=f[j][i]/f[i][i];
				lor(k,i,cnt) f[j][k]=((f[j][k]-t*f[i][k])%MOD+MOD)%MOD;
//				lor(k,i,cnt) f[j][k]-=t*f[i][k];
				ans=-ans;
			}
		}
		ans=((ans*f[i][i]%MOD)+MOD)%MOD;
	}
	printf("%lld\n",ans);
	
	return 0;	
}

inline char getc(){
	char tmp=getchar();
	while(tmp!=‘.‘&&tmp!=‘*‘) tmp=getchar();
	return tmp;
}

矩阵树定理

标签:--   等于   stdin   info   ref   ++   lazy   char   har   

原文地址:https://www.cnblogs.com/ticmis/p/13210737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!