线性代数?图论!

行列式

LGV引理

矩阵树定理

Laplace矩阵

定义Laplace矩阵L为:L=DA。其中D是对角矩阵,对角线上元素是各个顶点的度,A是图的邻接矩阵。

定理

定理1(无向图行列式形式)

对于任意的i,有

t(G)=detL(G)(1,,i1,i+1,,n1,,i1,i+1,,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,有

troot(G,i)=detLout(G)(1,,i1,i+1,,n1,,i1,i+1,,n)

图的所有内向树为itroot(G,i)

定理3(有向图外向形式)

对于任意的i,有

tleaf(G,i)=detLin(G)(1,,i1,i+1,,n1,,i1,i+1,,n)

定理4(BEST定理)

设G是有向欧拉图,G的不同欧拉回路总数ec(G)

ec(G)=troot(G,i)vV(deg(v)1)!

对于G的任意节点,troot(G,i)相等。

posted @   yisiwunian  阅读(28)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示