zoukankan      html  css  js  c++  java
  • Matrix-Tree 定理(基尔霍夫矩阵树定理)求图生成树个数

    Matrix-Tree 定理作用:给定 n 个点 m 条边的无向图,求图的生成树个数。

    定义矩阵K[i][j]=D[i][j]-A[i][j],(其中D为度数矩阵(即当i==j时,D[i][j]=节点 i 的度数,其余为0),A为邻接矩阵,有边相邻即为1,其余为0)

    结论:对于已经得出的基尔霍夫矩阵,去掉其随意一行一列得出的矩阵的行列式,其绝对值为生成树的个数

     注:行列式的绝对值:先用高斯消元消成上三角矩阵,把对角线乘起来

    文章:https://wenku.baidu.com/view/872eb02de2bd960590c677c6.html

    LL K[N][N];
    LL gauss(int n){//求矩阵K的n-1阶顺序主子式
        LL res=1;
        for(int i=1;i<=n-1;i++){
            for(int j=i+1;j<=n-1;j++){
                while(K[j][i]){
                    int t=K[i][i]/K[j][i];
                    for(int k=i;k<=n-1;k++)
                        K[i][k]=(K[i][k]-t*K[j][k]+MOD)%MOD;
                    swap(K[i],K[j]);
                    res=-res;
                }
            }
            res=(res*K[i][i])%MOD;
        }
        return (res+MOD)%MOD;
    }
    int main(){
        int n,m;
        scanf("%d%d",&n,&m);
        memset(K,0,sizeof(K));
        for(int i=1;i<=m;i++){
            int x,y;
            scanf("%d%d",&x,&y);
            K[x][x]++;
            K[y][y]++;
            K[x][y]--;
            K[y][x]--;
        }
        printf("%lld
    ",gauss(n));
        return 0;
    }
    View Code
  • 相关阅读:
    IfcAxis2Placement3D
    IfcAxis2Placement2D
    IfcAxis1Placement
    realsense 深度数据
    realsense 深度数据
    realsense 深度数据
    sudo fdisk -l
    temviewer历史版本
    100/9801
    IfcPlacement
  • 原文地址:https://www.cnblogs.com/starve/p/12849726.html
Copyright © 2011-2022 走看看