线性代数?图论!
行列式
咕
LGV引理
咕
矩阵树定理
Laplace矩阵
定义Laplace矩阵\(L\)为:\(L=D-A\)。其中\(D\)是对角矩阵,对角线上元素是各个顶点的度,\(A\)是图的邻接矩阵。
定理
定理1(无向图行列式形式)
对于任意的\(i\),有
\[t(G)=\det L(G)\binom{1,\cdots,i-1,i+1,\cdots,n}{1,\cdots,i-1,i+1,\cdots,n}
\]
Laplace矩阵所有n-1阶主子式都相等。
小Z的房间
#include<bits/stdc++.h>
using namespace std;
const int MAX=100;
const int mod=1e9;
#define int long long
int n,m,f[MAX][MAX],tot,id[MAX][MAX];string s[MAX];
inline int read(){
int x=0,f=1;char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
while(c<='9'&&c>='0'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
return x*f;
}
inline int GAUSS(int n){
int res=1;
for(int i=1;i<=n;++i){
for(int j=i+1;j<=n;++j){
while(f[i][i]){
int t=f[j][i]/f[i][i];
for(int k=i;k<=n;++k)
f[j][k]=(f[j][k]-f[i][k]*t%mod+mod)%mod;
swap(f[i],f[j]);res=-res;
}swap(f[i],f[j]);res=-res;
}res=res*f[i][i]%mod;
}return (res+mod)%mod;
}
signed main(){
n=read();m=read();
for(int i=1;i<=n;++i) cin>>s[i],s[i]=" "+s[i];
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(s[i][j]=='.') id[i][j]=++tot;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(s[i][j]=='.'){
int p=id[i][j];
if(s[i-1][j]=='.') f[p][p]++,f[p][id[i-1][j]]--;
if(s[i][j-1]=='.') f[p][p]++,f[p][id[i][j-1]]--;
if(s[i+1][j]=='.') f[p][p]++,f[p][id[i+1][j]]--;
if(s[i][j+1]=='.') f[p][p]++,f[p][id[i][j+1]]--;
}
printf("%lld",GAUSS(tot-1));
}
定理2(有向图内向形式)
对于任意的\(i\),有
\[t^{root}(G,i)=\det L^{out}(G)\binom{1,\cdots,i-1,i+1,\cdots,n}{1,\cdots,i-1,i+1,\cdots,n}
\]
图的所有内向树为\(\sum_i t^{root}(G,i)\)
定理3(有向图外向形式)
对于任意的\(i\),有
\[t^{leaf}(G,i)=\det L^{in}(G)\binom{1,\cdots,i-1,i+1,\cdots,n}{1,\cdots,i-1,i+1,\cdots,n}
\]
定理4(BEST定理)
设G是有向欧拉图,G的不同欧拉回路总数\(ec(G)\)是
\[ec(G)=t^{root}(G,i)\prod_{v\in V}(deg(v)-1)!
\]
对于G的任意节点,\(t^{root}(G,i)\)相等。