矩陣樹定理

  • 對於一個無向圖 G ,它的生成樹個數等於其基爾霍夫Kirchhoff矩陣任何一個N-1階主子式的行列式的絕對值。
  • 所謂的N-1階主子式就是對於一個任意的一個 r ,將矩陣的第 r 行和第 r 列同時刪去獲得的新矩陣。
  • 基爾霍夫Kirchhoff矩陣的一種求法:基爾霍夫Kirchhoff矩陣 K =度數矩陣 D - 鄰接矩陣 A。
  • 度數矩陣D:是一個 N×N 的矩陣,其中D[i][j]=0(i≠j),D[i][i]=iD。
  • 鄰接矩陣A:是一個 N×N 的矩陣,其中A[i][i]=0,A[i][j]=A[j][i]=i,j數。
#include<bits/stdc++.h>
using namespace std;
const int N = 505;
const long long mod = 1e4+7;

long long det(long long A[N][N],int n)// 0 ~ n-1  求行列式的值
{
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            A[i][j] = (A[i][j] % mod + mod) % mod;
        }
    }
    long long tmp = 1;
    for (int i = 0; i < n; ++i)
    {
        for (int j = i + 1; j < n; ++j)
        {
            while (A[j][i])
            {
                long long t = A[i][i] / A[j][i];
                for (int k = i; k < n; ++k)
                {
                    A[i][k] = (A[i][k] - t * A[j][k]) % mod;
                }
                swap(A[i], A[j]);
                tmp *= -1;
            }
        }
        if (!A[i][i]) return 0;
        tmp = A[i][i] * tmp % mod;
    }
    return (tmp + mod) % mod;
}

/*
入度矩陣對應的外向樹,出度矩陣對應着內向樹(都是指向父親的邊的事是出度或者入度)無根樹就是兩條有向邊都加上
有向樹必須刪掉根所在的那一行和一列,無根樹能夠任意
而後對於這n−1階的矩陣求一個行列式就是最小生成樹的個數
*/

int main()
{
}
相關文章
相關標籤/搜索